完善前端

This commit is contained in:
chenxin committed 2026-09-21 11:19:07 +08:00
1 parent 7c57d27494
commit b63542add3
81 files changed
+12075 -1441

No files matched your search

+399
View File
@@ -0,0 +1,399 @@
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>司命台 · 管理面 — 魂镜 Hunjing</title>
<link rel="stylesheet" href="assets/app.css?v=10">
</head>
<body>
<svg style="display:none" aria-hidden="true">
<symbol id="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></symbol>
<symbol id="i-home" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="M9 22V12h6v10"/></symbol>
<symbol id="i-shield" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></symbol>
<symbol id="i-kanban" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3h4v18H5z"/><path d="M10 3h4v12h-4z"/><path d="M15 3h4v8h-4z"/></symbol>
<symbol id="i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></symbol>
<symbol id="i-package" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></symbol>
<symbol id="i-monitor" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></symbol>
<symbol id="i-sliders" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></symbol>
<symbol id="i-clock" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></symbol>
<symbol id="i-file" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/></symbol>
<symbol id="i-download" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></symbol>
<symbol id="i-lock" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></symbol>
<symbol id="i-search" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></symbol>
<symbol id="i-refresh" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"/><path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"/></symbol>
<symbol id="i-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></symbol>
<symbol id="i-x" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></symbol>
<symbol id="i-activity" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></symbol>
<symbol id="i-database" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><ellipse cx="12" cy="5" rx="9" ry="3"/><path d="M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"/><path d="M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"/></symbol>
<symbol id="i-server" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="2" width="20" height="8" rx="2"/><rect x="2" y="14" width="20" height="8" rx="2"/><line x1="6" y1="6" x2="6.01" y2="6"/><line x1="6" y1="18" x2="6.01" y2="18"/></symbol>
<symbol id="i-cpu" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="4" width="16" height="16" rx="2"/><rect x="9" y="9" width="6" height="6"/><line x1="9" y1="1" x2="9" y2="4"/><line x1="15" y1="1" x2="15" y2="4"/><line x1="9" y1="20" x2="9" y2="23"/><line x1="15" y1="20" x2="15" y2="23"/><line x1="20" y1="9" x2="23" y2="9"/><line x1="20" y1="14" x2="23" y2="14"/><line x1="1" y1="9" x2="4" y2="9"/><line x1="1" y1="14" x2="4" y2="14"/></symbol>
<symbol id="i-alert" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></symbol>
<symbol id="i-chevrons" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="11 17 6 12 11 7"/><polyline points="18 17 13 12 18 7"/></symbol>
</svg>
<div class="app">
<aside class="sidebar">
<div class="brand">
<div class="brand__mark" aria-hidden="true"></div>
<div class="brand__text">
<div class="brand__name">魂镜</div>
<div class="brand__sub">司命台 · 管理面</div>
</div>
</div>
<nav class="side-nav" aria-label="管理面导航">
<div class="nav-group">
<div class="nav-group__title">运营</div>
<a class="nav-item is-active" href="#queue" aria-current="page"><svg><use href="#i-kanban"/></svg><span style="font-size:14.5px">治理队列</span></a>
<a class="nav-item" href="#tickets"><svg><use href="#i-file"/></svg><span style="font-size:14.5px">支持工单</span><span class="nav-plain">3</span></a>
<a class="nav-item" href="#users"><svg><use href="#i-users"/></svg><span style="font-size:14.5px">用户</span></a>
<a class="nav-item" href="#perms"><svg><use href="#i-shield"/></svg><span style="font-size:14.5px">权限管理</span></a>
</div>
<div class="nav-group">
<div class="nav-group__title">部署</div>
<a class="nav-item" href="#health"><svg><use href="#i-server"/></svg><span style="font-size:14.5px">服务健康</span></a>
<a class="nav-item" href="#backup"><svg><use href="#i-database"/></svg><span style="font-size:14.5px">迁移与备份</span></a>
<a class="nav-item" href="#queue" title="插件案件在治理队列「插件」分类"><svg><use href="#i-package"/></svg><span style="font-size:14.5px">插件治理</span></a>
</div>
<div class="nav-group">
<div class="nav-group__title">观测</div>
<a class="nav-item" href="#slo"><svg><use href="#i-activity"/></svg><span style="font-size:14.5px">SLO 与指标</span></a>
<a class="nav-item" href="#audit"><svg><use href="#i-shield"/></svg><span style="font-size:14.5px">审计日志</span></a>
</div>
<div class="nav-group">
<div class="nav-group__title">边界</div>
<a class="nav-item" href="governance.html"><svg><use href="#i-lock"/></svg><span style="font-size:14.5px">治理边界说明</span></a>
</div>
</nav>
<div class="side-foot">
<button class="icon-btn side-fold-btn" data-sidebar-fold aria-label="收起侧栏" title="收起 / 展开侧栏(记忆偏好)"><svg><use href="#i-chevrons"/></svg></button>
<span class="avatar avatar--sm avatar--user">司</span>
<span style="font-size:12.5px">运维 · 管理员</span>
<button class="icon-btn" data-theme-toggle style="margin-left:auto" aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</div>
<div style="border-top:1px solid var(--line-soft);padding:10px 16px">
<a href="home.html" style="font-size:12px;display:flex;align-items:center;gap:6px"><svg style="width:13px;height:13px"><use href="#i-home"/></svg>返回用户界面</a>
</div>
</aside>
<main class="main">
<header class="topbar">
<div class="crumbs"><span class="cn">司命台</span><span class="crumbs__sep">/</span><span class="here">管理面 · 运营与部署</span></div>
<div class="topbar__spacer"></div>
<span class="badge badge--warn"><span class="badge__dot"></span>双人授权会话 · 剩 41 分钟 <span class="mono">admin_session</span></span>
<span class="prototype-tag">静态原型 · 待审查</span>
<button class="icon-btn" data-theme-toggle aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</header>
<div class="content">
<div class="realm-banner" role="note">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
管理面边界:管理员不可读取私箧与用户明文内容;产品宪章的永久禁域不可被管理员配置关闭;敏感操作需双人授权(本次会话已授权)且全部写入审计。
</div>
<div class="hero" style="margin-bottom:22px">
<div>
<h1>治理总览</h1>
<p style="color:var(--text-2);font-size:13px;margin-top:4px">2026-09-16 09:40 · 自托管标准部署 · 区域驻留 cn-east-1(不跨区漂移)</p>
</div>
<div class="hero__stats">
<div class="hero__stat"><b style="color:var(--warn)">1</b><span>活跃告警</span></div>
<div class="hero__stat"><b>5</b><span>待处理司议</span></div>
<div class="hero__stat"><b>3</b><span>支持工单(未结)</span></div>
<div class="hero__stat"><b style="color:var(--ok)">99.87%</b><span>SLO 30 天(目标 99.9%)</span></div>
</div>
</div>
<section class="section card" id="astrolabe">
<div class="card__head">
<span class="cn">灵台星盘<span class="cn__plain">引擎六枢 · 活的仪表</span></span>
<span class="mirror-state mirror-state--steady" style="margin-left:auto"><i></i>稳镜 · steady <span class="cn__plain">铜镜四态:虚镜 / 息镜 / 稳镜 / 裂镜</span></span>
</div>
<div class="astrolabe-wrap">
<div class="astrolabe">
<svg viewBox="0 0 320 320" role="img" aria-label="灵台六枢星盘:太一居中,小周天、洛书、河图、陶钧、烛照环绕;烛照告警闪烁">
<g class="ast-spin"><circle cx="160" cy="160" r="148" fill="none" stroke="var(--gilt-faint)" stroke-width="0.7" stroke-dasharray="2 9"/></g>
<circle cx="160" cy="160" r="122" fill="none" stroke="var(--line-soft)" stroke-width="0.8"/>
<g stroke="var(--gilt-faint)" stroke-width="0.8">
<line x1="160" y1="160" x2="272" y2="160"/>
<line x1="160" y1="160" x2="160" y2="48"/>
<line x1="160" y1="160" x2="51" y2="102"/>
<line x1="160" y1="160" x2="51" y2="218"/>
<line x1="160" y1="160" x2="160" y2="272" transform="rotate(0)"/>
</g>
<!-- 太一(中枢) -->
<circle class="ast-breathe" cx="160" cy="160" r="40" fill="none" stroke="var(--gilt-dim)" stroke-width="0.8" stroke-dasharray="3 6"/>
<circle cx="160" cy="160" r="30" fill="var(--bg-raised)" stroke="var(--gilt-dim)"/>
<text class="ast-core-text" x="160" y="158" text-anchor="middle" font-size="14" font-weight="600">太一</text>
<text class="ast-node__plain" x="160" y="171" text-anchor="middle">总枢 · v1.4.2</text>
<!-- 小周天(东) -->
<g class="ast-node" title="小周天 · 流式引擎 hj_stream:增量、节流与事件序">
<circle cx="272" cy="160" r="22" fill="var(--bg-raised)" stroke="var(--accent)" stroke-opacity=".55"/>
<text class="ast-node__name" x="272" y="158" text-anchor="middle">小周天</text>
<circle cx="272" cy="184" r="3" fill="var(--ok)"/>
</g>
<!-- 洛书(北) -->
<g class="ast-node" title="洛书 · 计划引擎 hj_plan:预算与上下文装配">
<circle cx="160" cy="48" r="22" fill="var(--bg-raised)" stroke="var(--accent)" stroke-opacity=".55"/>
<text class="ast-node__name" x="160" y="46" text-anchor="middle">洛书</text>
<circle cx="160" cy="72" r="3" fill="var(--ok)"/>
</g>
<!-- 河图(西) -->
<g class="ast-node" title="河图 · 检索引擎 hj_recall:离线索引与重排">
<circle cx="51" cy="102" r="22" fill="var(--bg-raised)" stroke="var(--accent)" stroke-opacity=".55"/>
<text class="ast-node__name" x="51" y="100" text-anchor="middle">河图</text>
<circle cx="51" cy="126" r="3" fill="var(--ok)"/>
</g>
<!-- 陶钧(西南) -->
<g class="ast-node" title="陶钧 · 内容引擎 hj_transform:Markdown 规范化">
<circle cx="51" cy="218" r="22" fill="var(--bg-raised)" stroke="var(--accent)" stroke-opacity=".55"/>
<text class="ast-node__name" x="51" y="216" text-anchor="middle">陶钧</text>
<circle cx="51" cy="242" r="3" fill="var(--ok)"/>
</g>
<!-- 烛照(南 · 告警闪烁) -->
<g class="ast-node" title="烛照 · 策略引擎 hj_policy:校验、验签与决断——当前校验超时 2 次">
<circle cx="160" cy="272" r="22" fill="var(--bg-raised)" stroke="var(--cinnabar)"/>
<text class="ast-node__name" x="160" y="270" text-anchor="middle">烛照</text>
<circle class="ast-alert" cx="160" cy="296" r="3.4" fill="var(--cinnabar)"/>
</g>
</svg>
</div>
<div style="flex:1;min-width:230px">
<div class="clash-row">
<div class="clash-row__pair"><b>相克告警</b> · 错误率 vs 自动重试率 <span style="color:var(--text-3)">——重试正在掩盖错误,建议查 Sandbox 慢执行根因</span></div>
<div class="clash-strength" title="耦合强度 0.82"><i style="width:82%"></i></div>
</div>
<div class="clash-row">
<div class="clash-row__pair"><b>相生正常</b> · 候选生成率 → 人工审阅吞吐 <span style="color:var(--text-3)">——生成与审阅同速,息壤无积压</span></div>
<div class="clash-strength"><i style="width:46%;background:var(--accent)"></i></div>
</div>
<p style="font-size:11.5px;color:var(--text-3);margin-top:8px;line-height:1.7">星盘为活的仪表:呼吸刻度 7s、慢旋轨道 120s、告警枢点 1.8s 闪烁;点击枢点下钻。烛照(gRPC 形态)受阻时宿主 fail closed,不降级——引擎缺失即拒绝执行。指标对健康不是灯板而是关系动力学(相生 / 相克)。</p>
</div>
</div>
</section>
<div class="two-col">
<div>
<section class="section" id="queue">
<div class="section__head">
<span class="cn">司议<span class="cn__plain">治理案件 · 运营视角</span></span>
<a class="more" href="#">全部 →</a>
</div>
<div class="tabs" role="tablist" aria-label="治理队列分类">
<button class="tab is-on" role="tab" aria-selected="true">内容 <span class="cnt">2</span></button>
<button class="tab" role="tab" aria-selected="false">插件 <span class="cnt">1</span></button>
<button class="tab" role="tab" aria-selected="false">市场 <span class="cnt">1</span></button>
<button class="tab" role="tab" aria-selected="false">申诉 <span class="cnt">1</span></button>
</div>
<div class="card case-card" style="margin-bottom:14px;padding-left:20px">
<div class="card__head">
<span class="badge badge--warn"><span class="badge__dot"></span>待审 <span class="mono">pending_review</span></span>
<span class="badge badge--err" style="font-size:11px"><span class="badge__dot"></span>处理时限剩 6 小时</span>
<span style="font-size:11.5px;color:var(--text-3);margin-left:auto">09-16 03:12 · 鸣冤 ×3 · 举报人已匿名保护</span>
</div>
<p style="font-size:13.5px">雅集帖子「未署名的守砚人立像二创」:疑似违反 CC BY-NC 署名要求。系统预检:来源谱系比对确认与原作者资产相似度 91%。</p>
<div style="display:flex;gap:8px;margin-top:12px;flex-wrap:wrap">
<button class="btn btn--outline btn--sm">查看原文(记录访问)</button>
<button class="btn btn--outline btn--sm">限观 · 限制展示</button>
<button class="btn btn--danger btn--sm">移除</button>
<button class="btn btn--ghost btn--sm">驳回举报</button>
</div>
</div>
<div class="card case-card" style="padding-left:20px">
<div class="card__head">
<span class="badge badge--warn"><span class="badge__dot"></span>待审 <span class="mono">pending_review</span></span>
<span style="font-size:11.5px;color:var(--text-3);margin-left:auto">09-15 18:47 · 自动扫描 + 人工复核</span>
</div>
<p style="font-size:13.5px">市场商品「曲谱排版插件 v1.4」:Manifest 声明与实际网络请求域不一致(2 个未声明域)。已触发自动下架保护,等待复核结论。</p>
<div style="display:flex;gap:8px;margin-top:12px;flex-wrap:wrap">
<button class="btn btn--outline btn--sm">查看扫描报告</button>
<button class="btn btn--danger btn--sm">确认下架</button>
<button class="btn btn--outline btn--sm">恢复上架(需备注)</button>
<button class="btn btn--ghost btn--sm">通知创作者</button>
</div>
</div>
</section>
<section id="users" class="section">
<div class="section__head">
<span class="cn">用户<span class="cn__plain">账户状态治理</span></span>
<div class="searchbar" style="width:220px"><svg><use href="#i-search"/></svg><input type="search" placeholder="搜索用户 / ID" aria-label="搜索用户"></div>
</div>
<div class="card" style="padding:6px 18px">
<div class="list-row">
<span class="avatar avatar--sm avatar--user">岁</span>
<div class="list-row__body">
<div class="list-row__title">用户 u_7a2c… <span class="badge badge--warn" style="font-size:11px"><span class="badge__dot"></span>保全态 · 只读</span></div>
<div class="list-row__sub">欠费进入保全:角色与记忆只读保留,不删除数据(ADR-021);补缴后自动恢复</div>
</div>
<button class="btn btn--ghost btn--sm">查看保全详情</button>
</div>
<div class="list-row">
<span class="avatar avatar--sm avatar--user">尘</span>
<div class="list-row__body">
<div class="list-row__title">用户 u_31f0… <span class="badge badge--err" style="font-size:11px"><span class="badge__dot"></span>封禁 · 申诉中</span></div>
<div class="list-row__sub">封禁同样进入只读保全;申诉司议 #2041 处理中</div>
</div>
<button class="btn btn--ghost btn--sm">处理申诉</button>
</div>
</div>
<p style="font-size:12px;color:var(--text-3);margin-top:8px">不按记忆、感情或亲密等级计费;保全与删除是独立操作,删除需冷静期与二次双人授权。</p>
</section>
<section id="perms" class="section">
<div class="section__head">
<span class="cn">权限管理<span class="cn__plain">管理员账号与角色授权</span></span>
<button class="btn btn--outline btn--sm" style="margin-left:auto">新增管理员</button>
</div>
<div class="card" style="margin-bottom:14px">
<div class="card__head"><span class="cn" style="font-size:14px">管理员账号</span><span style="margin-left:auto;font-size:11.5px;color:var(--text-3)">4 个账号 · 全部启用双因素</span></div>
<div class="table-wrap"><table class="data">
<thead><tr><th>账号</th><th>角色</th><th>双因素</th><th>状态</th><th>操作</th></tr></thead>
<tbody>
<tr><td>运维 · 甲(你)</td><td>超级管理员</td><td class="mono">TOTP + 硬件钥匙</td><td><span class="badge badge--ok" style="font-size:11px"><span class="badge__dot"></span>在线</span></td><td><button class="btn btn--ghost btn--sm">编辑</button></td></tr>
<tr><td>运维 · 乙</td><td>运营管理员</td><td class="mono">TOTP</td><td><span class="badge badge--ok" style="font-size:11px"><span class="badge__dot"></span>双人会话中</span></td><td><button class="btn btn--ghost btn--sm">编辑</button></td></tr>
<tr><td>审核 · 丙</td><td>内容审核员</td><td class="mono">TOTP</td><td><span class="badge badge--muted" style="font-size:11px"><span class="badge__dot"></span>离线</span></td><td><button class="btn btn--ghost btn--sm">编辑</button></td></tr>
<tr><td class="mono">svc-audit-ro</td><td>只读服务账号</td><td class="mono">API key · scope audit:read</td><td><span class="badge badge--muted" style="font-size:11px"><span class="badge__dot"></span>90 天轮换</span></td><td><button class="btn btn--ghost btn--sm">轮换</button></td></tr>
</tbody>
</table></div>
</div>
<div class="card" style="margin-bottom:14px">
<div class="card__head"><span class="cn" style="font-size:14px">角色权限矩阵<span class="cn__plain">RBAC</span></span><span style="margin-left:auto;font-size:11.5px;color:var(--text-3)">编辑 / 发布 / 上架 / 财务分离,与同契台同规则</span></div>
<div class="table-wrap"><table class="data">
<thead><tr><th>角色</th><th>治理裁决</th><th>支持包</th><th>用户保全</th><th>部署设置</th><th>审计读取</th><th>权限管理</th></tr></thead>
<tbody>
<tr><td>超级管理员</td><td class="mark-ok">✓</td><td class="mark-ok">✓</td><td class="mark-ok">✓</td><td class="mark-ok">✓</td><td class="mark-ok">✓</td><td class="mark-ok">✓</td></tr>
<tr><td>运营管理员</td><td class="mark-ok">✓</td><td class="mark-ok">✓</td><td class="mark-ok">✓</td><td class="mark-no">—</td><td class="mark-ok">✓</td><td class="mark-no">—</td></tr>
<tr><td>内容审核员</td><td class="mark-ok">✓(内容)</td><td class="mark-no">—</td><td class="mark-no">—</td><td class="mark-no">—</td><td class="mark-ok">✓(只读)</td><td class="mark-no">—</td></tr>
<tr><td>只读服务账号</td><td class="mark-no">—</td><td class="mark-no">—</td><td class="mark-no">—</td><td class="mark-no">—</td><td class="mark-ok">✓</td><td class="mark-no">—</td></tr>
</tbody>
</table></div>
</div>
<div class="card">
<div class="card__head"><span class="cn" style="font-size:14px">双人授权策略</span><span style="margin-left:auto;font-size:11.5px;color:var(--text-3)">策略本身修改也需要双人授权</span></div>
<div class="set-row">
<div class="set-row__body"><div class="set-row__t">敏感操作双人授权</div><div class="set-row__d">治理裁决移除 / 用户保全变更 / 支持包生成 / 权限变更,均需两名管理员在线授权</div></div>
<span class="switch"><input type="checkbox" checked disabled aria-label="双人授权已启用(策略锁定)"><i></i></span>
</div>
<div class="set-row">
<div class="set-row__body"><div class="set-row__t">管理会话时长上限</div><div class="set-row__d">60 分钟 · 到期自动退出并留审计</div></div>
<span class="mono" style="font-size:12.5px;color:var(--text-2)">60 min</span>
</div>
<div class="set-row">
<div class="set-row__body"><div class="set-row__t">Break-glass 紧急通道</div><div class="set-row__d">默认关闭;紧急启用后所有操作事后复核,48 小时内强制复盘</div></div>
<span class="badge badge--muted" style="font-size:11px"><span class="badge__dot"></span>关闭 <span class="mono">off</span></span>
</div>
</div>
<p style="font-size:12px;color:var(--text-3);margin-top:8px">角色与权限变更即时生效并写入审计;被移除管理员的进行中双人会话立即失效。权限矩阵不包含「读取私箧 / 读取消息明文」——该权限不存在。</p>
</section>
<section id="tickets" class="section">
<div class="section__head">
<span class="cn">支持工单<span class="cn__plain">3 未结</span></span>
<a class="more" href="#">全部 →</a>
</div>
<div class="card" style="padding:6px 18px">
<div class="list-row">
<span class="badge badge--info" style="flex:none;font-size:11px"><span class="badge__dot"></span>处理中</span>
<div class="list-row__body">
<div class="list-row__title">#88231 · 对话流中断后未收到最终答复</div>
<div class="list-row__sub">用户云舟 · 09-15 21:04 提交 · 已关联 Run 快照(诊断双授权待用户批准)</div>
</div>
<button class="btn btn--outline btn--sm">回复</button>
</div>
<div class="list-row">
<span class="badge badge--muted" style="flex:none;font-size:11px"><span class="badge__dot"></span>待分派</span>
<div class="list-row__body">
<div class="list-row__title">#88229 · 退款争议:雾中茶寮 v3 下载后要求退款</div>
<div class="list-row__sub">按市契 14 天未下载规则预检:已下载,转争议流程</div>
</div>
<button class="btn btn--outline btn--sm">分派</button>
</div>
</div>
<div class="card" style="margin-top:12px">
<div class="card__head">
<span class="cn">支持包<span class="cn__plain">脱敏诊断导出</span></span>
<button class="btn btn--cinnabar btn--sm" style="margin-left:auto">生成 #88231 支持包</button>
</div>
<p style="font-size:12.5px;color:var(--text-2)">支持包为脱敏导出:包含 Run 结构化轨迹、错误与计数;<span style="color:var(--text-1)">不包含</span>消息明文、私箧、隐藏推理、密钥与签名 URL。生成需双人授权并计入审计,用户侧可见支持包被生成的记录。</p>
</div>
</section>
</div>
<div>
<section id="health" class="section card">
<div class="card__head"><span class="cn">部署健康<span class="cn__plain">自托管 · 标准服务器</span></span><button class="icon-btn" aria-label="刷新"><svg><use href="#i-refresh"/></svg></button></div>
<div class="set-row">
<svg style="width:16px;height:16px;color:var(--text-3)"><use href="#i-database"/></svg>
<div class="set-row__body"><div class="set-row__t">PostgreSQL 主库</div><div class="set-row__d">权威事实源 · 复制延迟 0.4s</div></div>
<span class="badge badge--ok" style="font-size:11px"><span class="badge__dot"></span>正常</span>
</div>
<div class="set-row">
<svg style="width:16px;height:16px;color:var(--text-3)"><use href="#i-server"/></svg>
<div class="set-row__body"><div class="set-row__t">Worker ×2</div><div class="set-row__sub set-row__d">Outbox 消费 · 队列深度 14</div></div>
<span class="badge badge--ok" style="font-size:11px"><span class="badge__dot"></span>正常</span>
</div>
<div class="set-row">
<svg style="width:16px;height:16px;color:var(--text-3)"><use href="#i-package"/></svg>
<div class="set-row__body"><div class="set-row__t">Sandbox Worker</div><div class="set-row__d">隔离容器池 · 无符合策略后端时拒绝执行(fail closed)</div></div>
<span class="badge badge--ok" style="font-size:11px"><span class="badge__dot"></span>正常</span>
</div>
<div class="set-row">
<svg style="width:16px;height:16px;color:var(--text-3)"><use href="#i-cpu"/></svg>
<div class="set-row__body"><div class="set-row__t cn">灵台<span class="cn__plain">引擎核心运行中 · 进程内 C ABI</span></div><div class="set-row__d mono">hj_core v1.4.2 · ABI 快照一致 · fuzz 无新增</div></div>
<span class="badge badge--ok" style="font-size:11px"><span class="badge__dot"></span>运转</span>
</div>
<div class="set-row" style="border-color:color-mix(in srgb,var(--warn) 35%,transparent)">
<svg style="width:16px;height:16px;color:var(--warn)"><use href="#i-server"/></svg>
<div class="set-row__body"><div class="set-row__t cn">灵台 · 服务形态<span class="cn__plain">gRPC · 内网 mTLS</span></div><div class="set-row__d">健康检查超时 2 次 · 语义与进程内形态一致(golden 通过);不可达时宿主 fail closed,不降级</div></div>
<span class="badge badge--warn" style="font-size:11px"><span class="badge__dot"></span>受阻 <span class="mono">degraded</span></span>
</div>
</section>
<section id="backup" class="section card">
<div class="card__head"><span class="cn">迁移与备份</span><button class="icon-btn" aria-label="立即备份"><svg><use href="#i-refresh"/></svg></button></div>
<div class="set-row" style="padding:8px 0"><div class="set-row__body"><div class="set-row__t">最近全量备份</div><div class="set-row__d">今日 03:00 · 增量每 5 分钟 · 连续 7 日校验通过</div></div><span class="mono" style="font-size:12.5px;color:var(--ok)">42s RPO</span></div>
<div class="set-row" style="padding:8px 0"><div class="set-row__body"><div class="set-row__t">迁移状态</div><div class="set-row__d">Alembic head · 34 个版本 · 无漂移</div></div><span class="badge badge--ok" style="font-size:11px"><span class="badge__dot"></span>一致</span></div>
<div class="set-row" style="padding:8px 0"><div class="set-row__body"><div class="set-row__t">恢复演练</div><div class="set-row__d">09-01 通过 · 删除重放与插件撤架演练各 1 次</div></div><button class="btn btn--outline btn--sm">发起演练</button></div>
</section>
<section class="section card" style="border-color:color-mix(in srgb,var(--warn) 40%,transparent)">
<div class="card__head"><span class="cn" style="color:var(--warn)">活跃告警<span class="cn__plain">1</span></span></div>
<div style="display:flex;gap:10px;align-items:flex-start">
<svg style="width:16px;height:16px;color:var(--warn);flex:none;margin-top:3px"><use href="#i-alert"/></svg>
<div>
<div style="font-size:13.5px">对象存储写入延迟 P99 超阈值(2.8s &gt; 2s,持续 12 分钟)</div>
<div style="font-size:12px;color:var(--text-3);margin-top:4px">影响:媒体上传整备变慢 · 自动扩容已触发 · 事故响应等级 S3</div>
<div style="display:flex;gap:8px;margin-top:10px">
<button class="btn btn--outline btn--sm">查看指标</button>
<button class="btn btn--ghost btn--sm">认领处理</button>
</div>
</div>
</div>
</section>
<section id="slo" class="section card">
<div class="card__head"><span class="cn">SLO 与恢复目标</span><a class="more" href="#">指标 →</a></div>
<div class="drive-row"><span class="drive-row__label">可用性</span><div class="progress"><div class="progress__bar" style="width:99.87%"></div></div><span class="drive-row__val">99.87%</span></div>
<div class="set-row" style="padding:8px 0"><div class="set-row__body"><div class="set-row__t">RPO(数据丢失上限)</div></div><span class="mono" style="font-size:12.5px">≤ 5 分钟 · 实测 42s</span></div>
<div class="set-row" style="padding:8px 0"><div class="set-row__body"><div class="set-row__t">RTO(恢复时限)</div></div><span class="mono" style="font-size:12.5px">≤ 1 小时 · 演练 09-01 通过</span></div>
<div class="set-row" style="padding:8px 0"><div class="set-row__body"><div class="set-row__t">区域驻留</div></div><span style="font-size:12px;color:var(--ok)">cn-east-1 · 未跨区漂移</span></div>
</section>
<section id="audit" class="section card">
<div class="card__head"><span class="cn">审计快照<span class="cn__plain">管理面操作全部留痕</span></span><a class="more" href="#">完整审计 →</a></div>
<div class="timeline">
<div class="timeline-volume">卷 · 0916</div>
<div class="timeline__item"><div class="timeline__date">09-16 09:31</div><div class="timeline__title">双人授权会话开启</div><div class="timeline__sub">运维甲 + 运维乙 · 60 分钟</div></div>
<div class="timeline__item"><div class="timeline__date">09-16 09:12</div><div class="timeline__title">限观决定:帖子 #77213</div><div class="timeline__sub">双人授权 · 操作者已留痕</div></div>
<div class="timeline__item timeline__item--muted"><div class="timeline__date">09-16 02:40</div><div class="timeline__title">私箧读取尝试(自动拦截)</div><div class="timeline__sub">策略拒绝 · 管理员不可读私箧 · 已通知账户持有人</div></div>
</div>
</section>
</div>
</div>
</div>
</main>
</div>
<script src="assets/app.js?v=3"></script>
</body>
</html>
+169
View File
@@ -0,0 +1,169 @@
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>天工阁 · Agent 任务工作台 — 魂镜 Hunjing</title>
<link rel="stylesheet" href="assets/app.css?v=10">
</head>
<body>
<svg style="display:none" aria-hidden="true"><symbol id="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></symbol><symbol id="i-home" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="M9 22V12h6v10"/></symbol><symbol id="i-branch" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="6" y1="3" x2="6" y2="15"/><circle cx="18" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/></symbol><symbol id="i-user" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></symbol><symbol id="i-book" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></symbol><symbol id="i-layers" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"/><polyline points="2 17 12 22 22 17"/><polyline points="2 12 12 17 22 12"/></symbol><symbol id="i-kanban" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3h4v18H5z"/><path d="M10 3h4v12h-4z"/><path d="M15 3h4v8h-4z"/></symbol><symbol id="i-package" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></symbol><symbol id="i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></symbol><symbol id="i-route" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="19" r="3"/><circle cx="18" cy="5" r="3"/><path d="M12 19h4.5a3.5 3.5 0 0 0 0-7h-9a3.5 3.5 0 0 1 0-7H12"/></symbol><symbol id="i-globe" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></symbol><symbol id="i-bag" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 0 1-8 0"/></symbol><symbol id="i-shield" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></symbol><symbol id="i-monitor" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></symbol><symbol id="i-sliders" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></symbol><symbol id="i-plus" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></symbol><symbol id="i-pause" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="6" y="4" width="4" height="16"/><rect x="14" y="4" width="4" height="16"/></symbol><symbol id="i-square" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/></symbol><symbol id="i-clock" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="Line truncated
</svg>
<div class="app">
<aside class="sidebar">
<div class="brand">
<div class="brand__mark" aria-hidden="true"></div>
<div class="brand__text">
<div class="brand__name">魂镜</div>
<div class="brand__sub">Hunjing</div>
</div>
</div>
<nav class="side-nav" aria-label="主导航"><div class="nav-group"><div class="nav-group__title">常用</div><a class="nav-item" href="home.html"><svg><use href="#i-home"/></svg><span class="cn">镜庭</span><span class="nav-plain">首页</span></a><a class="nav-item" href="conversation.html"><svg><use href="#i-branch"/></svg><span class="cn">镜树</span><span class="nav-plain">对话</span></a><a class="nav-item" href="characters.html"><svg><use href="#i-user"/></svg><span class="cn">镜生</span><span class="nav-plain">角色</span></a><a class="nav-item" href="memory.html"><svg><use href="#i-book"/></svg><span class="cn">息壤</span><span class="nav-plain">记忆</span></a><a class="nav-item" href="avatar.html"><svg><use href="#i-layers"/></svg><span class="cn">形仪</span><span class="nav-plain">形象</span></a></div><div class="nav-group"><div class="nav-group__title">创造</div><a class="nav-item is-active" aria-current="page" href="agent-workspace.html"><svg><use href="#i-kanban"/></svg><span class="cn">天工阁</span><span class="nav-plain">任务</span></a><a class="nav-item" href="plugins.html"><svg><use href="#i-package"/></svg><span class="cn">百工坊</span><span class="nav-plain">插件</span></a><a class="nav-item" href="collaboration.html"><svg><use href="#i-users"/></svg><span class="cn">同契台</span><span class="nav-plain">协作</span></a><a class="nav-item" href="model-gateway.html"><svg><use href="#i-route"/></svg><span class="cn">神识阁</span><span class="nav-plain">模型</span></a></div><div class="nav-group"><div class="nav-group__title">世界</div><a class="nav-item" href="community.html"><svg><use href="#i-globe"/></svg><span class="cn">雅集</span><span class="nav-plain">社区</span></a><a class="nav-item" href="marketplace.html"><svg><use href="#i-bag"/></svg><span class="cn">云市</span><span class="nav-plain">市场</span></a></div><div class="nav-group"><div class="nav-group__title">治理与账户</div><a class="nav-item" href="governance.html"><svg><use href="#i-shield"/></svg><span class="cn">司命台</span><span class="nav-plain">治理</span></a><a class="nav-item" href="devices.html"><svg><use href="#i-monitor"/></svg><span class="cn">器谱</span><span class="nav-plain">设备</span></a><a class="nav-item" href="settings.html"><svg><use href="#i-sliders"/></svg><span class="cn">设置</span><span class="nav-plain">账户</span></a></div></nav>
<div class="side-foot">
<button class="icon-btn side-fold-btn" data-sidebar-fold aria-label="收起侧栏" title="收起 / 展开侧栏(记忆偏好)"><svg><use href="#i-chevrons"/></svg></button>
<span class="avatar avatar--sm avatar--user">舟</span>
<span style="font-size:12.5px">云舟</span>
<button class="icon-btn" data-theme-toggle style="margin-left:auto" aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</div>
</aside>
<main class="main">
<header class="topbar">
<div class="crumbs"><span class="cn">天工阁</span><span class="crumbs__sep">·</span><span class="here">Agent 任务工作台</span></div>
<div class="topbar__spacer"></div>
<span class="prototype-tag">静态原型 · 待审查</span>
<button class="icon-btn" data-theme-toggle aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</header>
<div class="content">
<div class="realm-banner" role="note">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/></svg>
天工是功能执行者,不冒充角色身份;后台任务不构成第二个角色主体。任务可暂停、取消、审计。
</div>
<div class="char-layout">
<div>
<div class="card" style="padding:10px">
<div style="display:flex;justify-content:space-between;align-items:center;padding:4px 8px 10px">
<span class="cn" style="font-size:15px;font-weight:600">天工<span class="cn__plain">任务</span></span>
<button class="btn btn--outline btn--sm"><svg><use href="#i-plus"/></svg>新建</button>
</div>
<div class="char-list-item is-active" aria-current="page">
<div style="flex:1">
<div class="char-list-item__name" style="font-family:var(--font-ui)">整理性灵 newsletter 书单</div>
<div class="char-list-item__sub">青梧 · 分工使 2</div>
</div>
<span class="badge badge--info" style="font-size:11px;padding:1px 8px"><span class="badge__dot"></span>运转</span>
</div>
<div class="char-list-item">
<div style="flex:1">
<div class="char-list-item__name" style="font-family:var(--font-ui)">书房照片归档命名</div>
<div class="char-list-item__sub">青梧 · 已成</div>
</div>
<span class="badge badge--ok" style="font-size:11px;padding:1px 8px"><span class="badge__dot"></span>已成</span>
</div>
<div class="char-list-item">
<div style="flex:1">
<div class="char-list-item__name" style="font-family:var(--font-ui)">周报草稿 · 第 37 周</div>
<div class="char-list-item__sub">任务 Agent · 无角色身份</div>
</div>
<span class="badge badge--muted" style="font-size:11px;padding:1px 8px"><span class="badge__dot"></span>待启</span>
</div>
<div class="char-list-item">
<div style="flex:1">
<div class="char-list-item__name" style="font-family:var(--font-ui)">远洋航线资料校对</div>
<div class="char-list-item__sub">观澜 · 已止(你取消)</div>
</div>
<span class="badge badge--muted" style="font-size:11px;padding:1px 8px"><span class="badge__dot"></span>已止</span>
</div>
</div>
</div>
<div>
<div class="section card">
<div class="card__head" style="align-items:center">
<span class="cn" style="font-size:17px">整理性灵 newsletter 书单</span>
<span class="badge badge--info" style="margin-left:4px"><span class="badge__dot"></span>运转 · 运行中 <span class="mono">running</span></span>
<div style="margin-left:auto;display:flex;gap:8px">
<button class="btn btn--outline btn--sm"><svg><use href="#i-pause"/></svg>暂停</button>
<button class="btn btn--danger btn--sm"><svg><use href="#i-square"/></svg>取消</button>
</div>
</div>
<div style="font-size:12px;color:var(--text-3);display:flex;gap:16px;flex-wrap:wrap">
<span>Run <span class="mono">run_9f31c2</span></span><span>发起 · 镜树「选篇」主题</span><span>开始于 19:52</span><span>插件快照已固定</span>
</div>
</div>
<section class="section card">
<div class="card__head"><span class="cn">工筹<span class="cn__plain">执行计划</span></span><span style="margin-left:auto;font-size:11.5px;color:var(--text-3)">计划不是不可更改命令</span></div>
<div class="step step--done">
<span class="step__dot"><svg style="width:13px;height:13px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg></span>
<div><div class="step__t">收集来源 <span class="badge badge--ok" style="font-size:10.5px;padding:0 7px"><span class="badge__dot"></span>已成</span></div><div class="step__d">检索使 · 性灵 newsletter 近 12 期 · ModelCall ×2 · 1.8k token</div></div>
</div>
<div class="step step--run">
<span class="step__dot">二</span>
<div><div class="step__t">去重与筛选 <span class="badge badge--info" style="font-size:10.5px;padding:0 7px"><span class="badge__dot"></span>运转中</span></div><div class="step__d">按共读偏好排序 · 依赖步骤一 · 已 62%</div></div>
</div>
<div class="step">
<span class="step__dot">三</span>
<div><div class="step__t">生成摘要 <span class="badge badge--muted" style="font-size:10.5px;padding:0 7px"><span class="badge__dot"></span>待启</span></div><div class="step__d">每本 100 字以内 · 依赖步骤二</div></div>
</div>
<div class="step">
<span class="step__dot">四</span>
<div><div class="step__t">写入草稿 <span class="badge badge--muted" style="font-size:10.5px;padding:0 7px"><span class="badge__dot"></span>待启</span></div><div class="step__d">笔记库写入需请命朱批(行契未覆盖新目录)</div></div>
</div>
</section>
<section class="section card">
<div class="card__head"><span class="cn">预算<span class="cn__plain">RunBudget</span></span></div>
<div class="drive-row"><span class="drive-row__label">Token</span><div class="progress"><div class="progress__bar" style="width:62%"></div></div><span class="drive-row__val">12.4k/20k</span></div>
<div class="drive-row"><span class="drive-row__label">费用</span><div class="progress"><div class="progress__bar" style="width:60%"></div></div><span class="drive-row__val">¥0.42/0.70</span></div>
<div class="drive-row"><span class="drive-row__label">时间</span><div class="progress progress--warn"><div class="progress__bar" style="width:42%"></div></div><span class="drive-row__val">4:12/10:00</span></div>
<p style="font-size:12px;color:var(--text-3);margin-top:8px">深度 3 层 · 并发分工使上限 4 · 任一硬上限触发即停,可续跑。</p>
</section>
<section class="section card">
<div class="card__head"><span class="cn">分工使<span class="cn__plain">子 Agent · 权限只能收窄</span></span></div>
<div class="list-row">
<span class="avatar avatar--sm">梧</span>
<div class="list-row__body"><div class="list-row__title">检索使 A</div><div class="list-row__sub">只读快照 · 无审批权 · 不写长期记忆</div></div>
<span class="badge badge--ok" style="font-size:11px"><span class="badge__dot"></span>已成</span>
</div>
<div class="list-row">
<span class="avatar avatar--sm">梧</span>
<div class="list-row__body"><div class="list-row__title">检索使 B(外部信源)</div><div class="list-row__sub">网络白名单 api.xingling.app · 工具结果只是观察,采用前需验证</div></div>
<span class="badge badge--info" style="font-size:11px"><span class="badge__dot"></span>运转</span>
</div>
<div class="list-row">
<span class="avatar avatar--sm">梧</span>
<div class="list-row__body"><div class="list-row__title">摘要使</div><div class="list-row__sub">token 上限 3k · 等待步骤二</div></div>
<span class="badge badge--muted" style="font-size:11px"><span class="badge__dot"></span>待启</span>
</div>
</section>
<section class="section card">
<div class="card__head"><span class="cn">轨迹<span class="cn__plain">可审计事件</span></span><a class="more" href="governance.html">完整诊断需双重授权 →</a></div>
<div class="timeline">
<div class="timeline__item"><div class="timeline__date">19:52:04</div><div class="timeline__title">Run 创建</div><div class="timeline__sub">镜像树消息触发 · 幂等键 idem_3c8e</div></div>
<div class="timeline__item"><div class="timeline__date">19:52:31</div><div class="timeline__title">ModelCall ×2(检索规划)</div><div class="timeline__sub">TTFT 0.9s · cache 命中 1.2k · 无重试</div></div>
<div class="timeline__item"><div class="timeline__date">19:53:10</div><div class="timeline__title">ToolCall · notes.read</div><div class="timeline__sub">读取授权目录 · Schema 校验通过 · 0.8s</div></div>
<div class="timeline__item"><div class="timeline__date">19:55:48</div><div class="timeline__title">小周天信号累积</div><div class="timeline__sub">完成信号将作为青梧大周天的唯一输入面</div></div>
</div>
</section>
<section class="section card" style="opacity:.75">
<div class="card__head"><span class="cn">验收<span class="cn__plain">完成后你来决定</span></span></div>
<div style="display:flex;gap:10px;align-items:center">
<button class="btn btn--primary" disabled>接受结果</button>
<button class="btn btn--outline" disabled>要求重做</button>
<span style="font-size:12px;color:var(--text-3)">完成后开放 · 接受前可随时取消,无副作用残留(幂等保障)</span>
</div>
</section>
</div>
</div>
</div>
</main>
</div>
<script src="assets/app.js?v=3"></script>
</body>
</html>
File diff suppressed because it is too large. Load diff
+222
View File
@@ -0,0 +1,222 @@
/* 魂镜原型 · 共享交互脚本
主题切换 · logo 彩蛋(镜启)· 主侧栏折叠 · 对话页面板折叠 · 演示态切换 */
(function () {
"use strict";
/* ---------- 主题切换(localStorage 持久化,仅原型演示用) ---------- */
var saved = null;
try { saved = localStorage.getItem("hunjing-prototype-theme"); } catch (e) { /* 忽略 */ }
if (saved === "light" || saved === "dark") {
document.documentElement.setAttribute("data-theme", saved);
}
window.hjSetTheme = function (theme) {
document.documentElement.setAttribute("data-theme", theme);
try { localStorage.setItem("hunjing-prototype-theme", theme); } catch (e) { /* 忽略 */ }
document.querySelectorAll("[data-theme-toggle]").forEach(function (btn) {
btn.setAttribute("aria-label", theme === "dark" ? "切换到月白主题" : "切换到墨色主题");
});
};
document.addEventListener("click", function (ev) {
var btn = ev.target.closest("[data-theme-toggle]");
if (!btn) return;
var cur = document.documentElement.getAttribute("data-theme") === "light" ? "light" : "dark";
window.hjSetTheme(cur === "dark" ? "light" : "dark");
});
/* ---------- logo:单击回目录;350ms 内连点 5 次触发「镜启」彩蛋 ----------
承接 main 分支旧版设计:镜启不跳转,随机呈上一句镜铭。 */
var EGG_VERSES = [
"镜中有镜,心外无心。",
"汝来看此镜时,此镜亦照汝。",
"一念起,万镜生。",
"镜非鉴物,乃鉴心也。",
"幻由心生,镜随心转。",
"铜镜本无字,照尽往来人。",
"且向镜中看,那个是谁?",
];
var logoClickSeq = 0;
var lastLogoTime = 0;
var jumpTimer = null;
function showEggToast(msg) {
var toast = document.createElement("div");
toast.className = "egg-toast";
toast.textContent = msg;
document.body.appendChild(toast);
requestAnimationFrame(function () { toast.classList.add("is-on"); });
setTimeout(function () {
toast.classList.remove("is-on");
setTimeout(function () { toast.remove(); }, 450);
}, 2400);
}
function onBrandClick(brandEl) {
clearTimeout(jumpTimer);
var now = Date.now();
var fast = now - lastLogoTime < 380; /* 380ms 内视为连点 */
lastLogoTime = now;
if (brandEl) {
brandEl.classList.add("tick");
setTimeout(function () { brandEl.classList.remove("tick"); }, 300);
}
if (fast) {
logoClickSeq += 1;
if (logoClickSeq >= 4) {
/* 首击 + 4 次连点 = 共 5 次点击:镜启彩蛋,不跳转 */
logoClickSeq = 0;
var v = EGG_VERSES[Math.floor(Math.random() * EGG_VERSES.length)];
if (brandEl) {
brandEl.classList.add("egg-pulse");
setTimeout(function () { brandEl.classList.remove("egg-pulse"); }, 1400);
}
showEggToast("镜启 · " + v);
}
return; /* 连点不跳转 */
}
logoClickSeq = 0;
/* 单击延迟跳转,为连点留出窗口 */
jumpTimer = setTimeout(function () { location.href = "index.html"; }, 380);
}
/* ---------- 主侧栏折叠(localStorage 持久化) ---------- */
function applySidebarFold(collapsed) {
document.querySelectorAll(".app").forEach(function (app) {
app.classList.toggle("app--fold", collapsed);
});
}
function sidebarFolded() {
var app = document.querySelector(".app");
return !!(app && app.classList.contains("app--fold"));
}
/* ---------- 对话页左右面板折叠 ---------- */
function panelFold(which) {
var layout = document.querySelector(".conv-layout");
if (!layout) return;
layout.classList.toggle("no-" + which);
}
/* ---------- 事件委托 ---------- */
document.addEventListener("click", function (ev) {
var t = ev.target;
if (!t || !t.closest) return;
var foldBtn = t.closest("[data-sidebar-fold]");
if (foldBtn) {
ev.preventDefault();
var collapsed = !sidebarFolded();
applySidebarFold(collapsed);
try { localStorage.setItem("hunjing-prototype-sidebar", collapsed ? "collapsed" : "expanded"); } catch (e) { /* 忽略 */ }
return;
}
var panelBtn = t.closest("[data-panel-fold]");
if (panelBtn) {
ev.preventDefault();
panelFold(panelBtn.getAttribute("data-panel-fold"));
return;
}
var brand = t.closest(".brand");
if (brand) {
ev.preventDefault();
onBrandClick(brand);
return;
}
});
/* 恢复折叠状态 */
try {
var foldSaved = localStorage.getItem("hunjing-prototype-sidebar");
if (foldSaved === "collapsed") applySidebarFold(true);
} catch (e) { /* 忽略 */ }
/* ---------- 深虑:点击 = 开启深度思考(右侧伴随力度选项);再次点击 = 关闭并隐藏选项 ---------- */
function setEffortHint(on, val) {
var hint = document.querySelector("[data-effort-hint]");
if (hint) hint.textContent = on ? "深虑 · " + val : "深虑 · 关";
}
document.addEventListener("click", function (ev) {
var t = ev.target;
if (!t || !t.closest) return;
/* 力度选项:独立控件,只调档,与深虑开关动作无关(关闭态隐藏时不响应) */
var opt = t.closest("[data-effort-seg] button[data-effort]");
if (opt) {
ev.preventDefault();
ev.stopPropagation();
if (opt.closest("[data-effort-seg]").hidden) return;
document.querySelectorAll("[data-effort-seg] button").forEach(function (b) {
b.setAttribute("aria-checked", String(b === opt));
});
setEffortHint(true, opt.getAttribute("data-effort"));
return;
}
/* 深虑按钮:开 ⇄ 关 */
var pill = t.closest('[data-pill="effort"]');
if (pill) {
ev.preventDefault();
var on = !pill.classList.contains("is-on");
pill.classList.toggle("is-on", on);
pill.setAttribute("aria-pressed", String(on));
pill.title = on
? "深虑 · 深度思考已开启,再次点击关闭"
: "深虑 · 已关闭:本条消息不思考,直出答复(推理型模型不可关)";
var seg = document.querySelector("[data-effort-seg]");
if (seg) seg.hidden = !on;
var val = "关";
if (on) {
var checked = document.querySelector('[data-effort-seg] button[aria-checked="true"]');
val = checked ? checked.getAttribute("data-effort") : "中";
}
setEffortHint(on, val);
return;
}
});
/* ---------- 博闻药丸(关→开) ---------- */
document.addEventListener("click", function (ev) {
var pill = ev.target.closest('[data-pill="search"]');
if (!pill) return;
ev.preventDefault();
var small = pill.querySelector("small");
if (!small) return;
var on = small.textContent.trim() === "开";
small.textContent = on ? "关" : "开";
pill.classList.toggle("is-on", !on);
pill.setAttribute("aria-pressed", String(!on));
});
/* ---------- 候答切换(静态演示) ---------- */
document.querySelectorAll("[data-cand-group]").forEach(function (group) {
group.querySelectorAll(".cand-tag").forEach(function (tag) {
tag.addEventListener("click", function () {
group.querySelectorAll(".cand-tag").forEach(function (tt) { tt.classList.remove("is-on"); });
tag.classList.add("is-on");
});
});
});
/* ---------- 界域分段控件:切换提示条文案 ---------- */
document.querySelectorAll("[data-realm]").forEach(function (seg) {
seg.querySelectorAll(".seg__item").forEach(function (item) {
item.addEventListener("click", function () {
seg.querySelectorAll(".seg__item").forEach(function (tt) { tt.classList.remove("is-on"); });
item.classList.add("is-on");
var banner = document.querySelector("[data-realm-banner]");
if (!banner) return;
var realm = item.getAttribute("data-realm");
if (realm === "sim") {
banner.className = "realm-banner realm-banner--sim";
} else {
banner.className = "realm-banner";
}
var html = item.getAttribute("data-banner-html");
if (html) banner.textContent = html;
});
});
});
})();
+145
View File
@@ -0,0 +1,145 @@
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>形仪 · 形象与资产 — 魂镜 Hunjing</title>
<link rel="stylesheet" href="assets/app.css?v=10">
</head>
<body>
<svg style="display:none" aria-hidden="true"><symbol id="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></symbol><symbol id="i-home" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="M9 22V12h6v10"/></symbol><symbol id="i-branch" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="6" y1="3" x2="6" y2="15"/><circle cx="18" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/></symbol><symbol id="i-user" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></symbol><symbol id="i-book" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></symbol><symbol id="i-layers" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"/><polyline points="2 17 12 22 22 17"/><polyline points="2 12 12 17 22 12"/></symbol><symbol id="i-kanban" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3h4v18H5z"/><path d="M10 3h4v12h-4z"/><path d="M15 3h4v8h-4z"/></symbol><symbol id="i-package" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></symbol><symbol id="i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></symbol><symbol id="i-route" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="19" r="3"/><circle cx="18" cy="5" r="3"/><path d="M12 19h4.5a3.5 3.5 0 0 0 0-7h-9a3.5 3.5 0 0 1 0-7H12"/></symbol><symbol id="i-globe" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></symbol><symbol id="i-bag" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 0 1-8 0"/></symbol><symbol id="i-shield" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></symbol><symbol id="i-monitor" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></symbol><symbol id="i-sliders" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></symbol><symbol id="i-image" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="8.5" cy="8.5" r="1.5"/><polyline points="21 15 16 10 5 21"/></symbol><symbol id="i-mic" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"/><path d="M19 10v2a7 7 0 0 1-14 0v-2"/><line x1="12" y1="19" x2="12" y2="23"/></symbol><symbol id="i-play" viewBox="0 0 24 24" fill="currentColor" stroke="none"><polygon points="6 3 21 12 6 21 6 3"/></symbol><symbol id="i-download" viewBox="0 0 24 24" fill="none" stroke="Line truncated
</svg>
<div class="app">
<aside class="sidebar">
<div class="brand">
<div class="brand__mark" aria-hidden="true"></div>
<div class="brand__text">
<div class="brand__name">魂镜</div>
<div class="brand__sub">Hunjing</div>
</div>
</div>
<nav class="side-nav" aria-label="主导航"><div class="nav-group"><div class="nav-group__title">常用</div><a class="nav-item" href="home.html"><svg><use href="#i-home"/></svg><span class="cn">镜庭</span><span class="nav-plain">首页</span></a><a class="nav-item" href="conversation.html"><svg><use href="#i-branch"/></svg><span class="cn">镜树</span><span class="nav-plain">对话</span></a><a class="nav-item" href="characters.html"><svg><use href="#i-user"/></svg><span class="cn">镜生</span><span class="nav-plain">角色</span></a><a class="nav-item" href="memory.html"><svg><use href="#i-book"/></svg><span class="cn">息壤</span><span class="nav-plain">记忆</span></a><a class="nav-item is-active" aria-current="page" href="avatar.html"><svg><use href="#i-layers"/></svg><span class="cn">形仪</span><span class="nav-plain">形象</span></a></div><div class="nav-group"><div class="nav-group__title">创造</div><a class="nav-item" href="agent-workspace.html"><svg><use href="#i-kanban"/></svg><span class="cn">天工阁</span><span class="nav-plain">任务</span></a><a class="nav-item" href="plugins.html"><svg><use href="#i-package"/></svg><span class="cn">百工坊</span><span class="nav-plain">插件</span></a><a class="nav-item" href="collaboration.html"><svg><use href="#i-users"/></svg><span class="cn">同契台</span><span class="nav-plain">协作</span></a><a class="nav-item" href="model-gateway.html"><svg><use href="#i-route"/></svg><span class="cn">神识阁</span><span class="nav-plain">模型</span></a></div><div class="nav-group"><div class="nav-group__title">世界</div><a class="nav-item" href="community.html"><svg><use href="#i-globe"/></svg><span class="cn">雅集</span><span class="nav-plain">社区</span></a><a class="nav-item" href="marketplace.html"><svg><use href="#i-bag"/></svg><span class="cn">云市</span><span class="nav-plain">市场</span></a></div><div class="nav-group"><div class="nav-group__title">治理与账户</div><a class="nav-item" href="governance.html"><svg><use href="#i-shield"/></svg><span class="cn">司命台</span><span class="nav-plain">治理</span></a><a class="nav-item" href="devices.html"><svg><use href="#i-monitor"/></svg><span class="cn">器谱</span><span class="nav-plain">设备</span></a><a class="nav-item" href="settings.html"><svg><use href="#i-sliders"/></svg><span class="cn">设置</span><span class="nav-plain">账户</span></a></div></nav>
<div class="side-foot">
<button class="icon-btn side-fold-btn" data-sidebar-fold aria-label="收起侧栏" title="收起 / 展开侧栏(记忆偏好)"><svg><use href="#i-chevrons"/></svg></button>
<span class="avatar avatar--sm avatar--user">舟</span>
<span style="font-size:12.5px">云舟</span>
<button class="icon-btn" data-theme-toggle style="margin-left:auto" aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</div>
</aside>
<main class="main">
<header class="topbar">
<div class="crumbs"><span class="cn">形仪</span><span class="crumbs__sep">/</span><span class="here">青梧 · 形象与资产</span></div>
<div class="topbar__spacer"></div>
<span class="prototype-tag">静态原型 · 待审查</span>
<button class="icon-btn" data-theme-toggle aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</header>
<div class="content">
<div class="char-head" style="margin-bottom:20px">
<span class="avatar avatar--lg">梧</span>
<div class="char-head__title">
<h2>青梧的形仪 <span class="badge badge--muted"><span class="badge__dot"></span>形态不是角色本体</span></h2>
<div class="char-head__motto">主仪 · 守砚人立像 v3 · 真形锚已锁定稳定辨识特征</div>
</div>
<div class="char-head__actions">
<button class="btn btn--outline"><svg><use href="#i-plus"/></svg>导入资产</button>
<button class="btn btn--primary" title="3D / Live2D 编辑器为独立界面,原型阶段未单列">打开 3D / Live2D 编辑</button>
</div>
</div>
<section class="section card">
<div class="card__head">
<span class="cn">真形锚<span class="cn__plain">稳定外观参考</span></span>
<button class="btn btn--ghost btn--sm" style="margin-left:auto">编辑</button>
</div>
<div style="font-size:13px;color:var(--text-2);display:flex;flex-direction:column;gap:6px">
<div>· 稳定辨识特征:青衫束发、眉间一点朱痣、左手常年持砚</div>
<div>· 年龄表现约束:成年形象,不做年龄回退</div>
<div>· 许可与禁忌:形象由你原创 · 禁止他人商用(许可记录见来源谱系)</div>
<div>· 可变范围:服饰、场景、光照可变;面部锚点特征触及须走易相评估</div>
</div>
</section>
<section class="section">
<div class="section__head">
<span class="cn">资产库<span class="cn__plain">图像 / 声音 / Live2D / 3D</span></span>
</div>
<div class="chips">
<button class="chip is-on">全部 · 6</button>
<button class="chip">图像 · 2</button>
<button class="chip">声音 · 1</button>
<button class="chip">Live2D · 1</button>
<button class="chip">3D · 1</button>
<button class="chip">归档 · 1</button>
</div>
<div class="asset-grid">
<div class="asset-card">
<div class="asset-thumb" style="background:linear-gradient(150deg,#2c4a46,#54948a 60%,#2f5c56)"><span class="glyph">立</span><span class="asset-type">图像</span><span class="asset-flag badge badge--info" style="font-size:10.5px;padding:1px 8px">主仪</span></div>
<div class="asset-body"><span class="asset-name">守砚人立像</span><span class="asset-sub">v3 · 已定相 · 2048×2560</span>
<div class="asset-acts"><button class="btn btn--ghost btn--sm">查看</button><button class="btn btn--ghost btn--sm"><svg><use href="#i-download"/></svg>导出</button></div>
</div>
</div>
<div class="asset-card">
<div class="asset-thumb" style="background:linear-gradient(150deg,#3d4059,#6b6f95 60%,#454a6b)"><span class="glyph">冬</span><span class="asset-type">图像</span></div>
<div class="asset-body"><span class="asset-name">冬青 · 化仪</span><span class="asset-sub">v1 · 可切换形态</span>
<div class="asset-acts"><button class="btn btn--ghost btn--sm">查看</button><button class="btn btn--ghost btn--sm">设为化仪</button></div>
</div>
</div>
<div class="asset-card">
<div class="asset-thumb" style="background:linear-gradient(150deg,#4a4436,#8a7a52 60%,#57503e)"><span class="glyph">声</span><span class="asset-type">声音</span><span class="asset-flag badge badge--ok" style="font-size:10.5px;padding:1px 8px">声契 · 原创</span></div>
<div class="asset-body"><span class="asset-name">青梧原声</span><span class="asset-sub">原创设计 · 授权完整 · 转写并存</span>
<div class="asset-acts"><button class="btn btn--ghost btn--sm"><svg><use href="#i-play"/></svg>试听</button><button class="btn btn--ghost btn--sm">声音设计</button></div>
</div>
</div>
<div class="asset-card">
<div class="asset-thumb" style="background:linear-gradient(150deg,#233b37,#3f7a6e 60%,#2a4d47)"><span class="glyph">灵</span><span class="asset-type">Live2D</span></div>
<div class="asset-body"><span class="asset-name">守砚人 · 灵动版</span><span class="asset-sub">Cubism 兼容导入 · 校验通过 · 参数映射 42 项</span>
<div class="asset-acts"><button class="btn btn--ghost btn--sm">编辑</button><button class="btn btn--ghost btn--sm">运行预览</button></div>
</div>
</div>
<div class="asset-card">
<div class="asset-thumb" style="background:linear-gradient(150deg,#37343f,#635d7a 60%,#443f52)"><span class="glyph">三</span><span class="asset-type">3D · VRM</span></div>
<div class="asset-body"><span class="asset-name">守砚人 VRM</span><span class="asset-sub">导入验证与标准化通过 · 骨骼 54 · 表情 12</span>
<div class="asset-acts"><button class="btn btn--ghost btn--sm">编辑</button><button class="btn btn--ghost btn--sm"><svg><use href="#i-download"/></svg>导出</button></div>
</div>
</div>
<div class="asset-card" style="opacity:.72">
<div class="asset-thumb" style="background:linear-gradient(150deg,#2e3236,#4c545b 60%,#383d42)"><span class="glyph">旧</span><span class="asset-type">图像 · 归档</span></div>
<div class="asset-body"><span class="asset-name">旧版立像 v2</span><span class="asset-sub">易相历史保留 · 可回看不可覆盖</span>
<div class="asset-acts"><button class="btn btn--ghost btn--sm">回看</button></div>
</div>
</div>
</div>
</section>
<section class="section card">
<div class="card__head">
<span class="cn">易相<span class="cn__plain">正式形仪的版本化改变</span></span>
<a class="more" href="#">全部 3 次 →</a>
</div>
<div class="timeline">
<div class="timeline__item">
<div class="timeline__date">2024-03-05</div>
<div class="timeline__title cn">主仪 v1 · 初版立像</div>
<div class="timeline__sub">来源:手动上传</div>
</div>
<div class="timeline__item">
<div class="timeline__date">2025-11-20</div>
<div class="timeline__title cn">易相 v2 · 换季服饰(未触及真形锚)</div>
<div class="timeline__sub">轻流程 · 直接生效</div>
</div>
<div class="timeline__item">
<div class="timeline__date">2026-08-30</div>
<div class="timeline__title cn">易相 v3 · 面部细节重绘(触及真形锚)</div>
<div class="timeline__sub">已做身份连续性评估 · 谱系留痕</div>
</div>
</div>
<p style="font-size:12px;color:var(--text-3);margin-top:10px">情相 · 情态的受控表现:可访问性友好,不作为情绪施压载体;叙仪 · 境界或幻境中的叙事形态,不改变主仪与真形锚。</p>
</section>
</div>
</main>
</div>
<script src="assets/app.js?v=3"></script>
</body>
</html>
+233
View File
@@ -0,0 +1,233 @@
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>镜生 · 角色 — 魂镜 Hunjing</title>
<link rel="stylesheet" href="assets/app.css?v=10">
</head>
<body>
<svg style="display:none" aria-hidden="true">
<symbol id="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></symbol>
<symbol id="i-home" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="M9 22V12h6v10"/></symbol>
<symbol id="i-branch" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="6" y1="3" x2="6" y2="15"/><circle cx="18" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/></symbol>
<symbol id="i-book" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></symbol>
<symbol id="i-user" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></symbol>
<symbol id="i-layers" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"/><polyline points="2 17 12 22 22 17"/><polyline points="2 12 12 17 22 12"/></symbol>
<symbol id="i-kanban" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3h4v18H5z"/><path d="M10 3h4v12h-4z"/><path d="M15 3h4v8h-4z"/></symbol>
<symbol id="i-package" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></symbol>
<symbol id="i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></symbol>
<symbol id="i-bag" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 0 1-8 0"/></symbol>
<symbol id="i-shield" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></symbol>
<symbol id="i-bell" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 0 1-3.46 0"/></symbol>
<symbol id="i-search" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></symbol>
<symbol id="i-plus" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></symbol>
<symbol id="i-download" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></symbol>
<symbol id="i-route" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="19" r="3"/><circle cx="18" cy="5" r="3"/><path d="M12 19h4.5a3.5 3.5 0 0 0 0-7h-9a3.5 3.5 0 0 1 0-7H12"/></symbol>
<symbol id="i-globe" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></symbol>
<symbol id="i-monitor" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></symbol>
<symbol id="i-sliders" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></symbol>
<symbol id="i-chevrons" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="11 17 6 12 11 7"/><polyline points="18 17 13 12 18 7"/></symbol>
</svg>
<div class="app">
<aside class="sidebar">
<div class="brand">
<div class="brand__mark" aria-hidden="true"></div>
<div class="brand__text">
<div class="brand__name">魂镜</div>
<div class="brand__sub">Hunjing</div>
</div>
</div>
<nav class="side-nav" aria-label="主导航"><div class="nav-group"><div class="nav-group__title">常用</div><a class="nav-item" href="home.html"><svg><use href="#i-home"/></svg><span class="cn">镜庭</span><span class="nav-plain">首页</span></a><a class="nav-item" href="conversation.html"><svg><use href="#i-branch"/></svg><span class="cn">镜树</span><span class="nav-plain">对话</span></a><a class="nav-item is-active" aria-current="page" href="characters.html"><svg><use href="#i-user"/></svg><span class="cn">镜生</span><span class="nav-plain">角色</span></a><a class="nav-item" href="memory.html"><svg><use href="#i-book"/></svg><span class="cn">息壤</span><span class="nav-plain">记忆</span></a><a class="nav-item" href="avatar.html"><svg><use href="#i-layers"/></svg><span class="cn">形仪</span><span class="nav-plain">形象</span></a></div><div class="nav-group"><div class="nav-group__title">创造</div><a class="nav-item" href="agent-workspace.html"><svg><use href="#i-kanban"/></svg><span class="cn">天工阁</span><span class="nav-plain">任务</span></a><a class="nav-item" href="plugins.html"><svg><use href="#i-package"/></svg><span class="cn">百工坊</span><span class="nav-plain">插件</span></a><a class="nav-item" href="collaboration.html"><svg><use href="#i-users"/></svg><span class="cn">同契台</span><span class="nav-plain">协作</span></a><a class="nav-item" href="model-gateway.html"><svg><use href="#i-route"/></svg><span class="cn">神识阁</span><span class="nav-plain">模型</span></a></div><div class="nav-group"><div class="nav-group__title">世界</div><a class="nav-item" href="community.html"><svg><use href="#i-globe"/></svg><span class="cn">雅集</span><span class="nav-plain">社区</span></a><a class="nav-item" href="marketplace.html"><svg><use href="#i-bag"/></svg><span class="cn">云市</span><span class="nav-plain">市场</span></a></div><div class="nav-group"><div class="nav-group__title">治理与账户</div><a class="nav-item" href="governance.html"><svg><use href="#i-shield"/></svg><span class="cn">司命台</span><span class="nav-plain">治理</span></a><a class="nav-item" href="devices.html"><svg><use href="#i-monitor"/></svg><span class="cn">器谱</span><span class="nav-plain">设备</span></a><a class="nav-item" href="settings.html"><svg><use href="#i-sliders"/></svg><span class="cn">设置</span><span class="nav-plain">账户</span></a></div></nav>
<div class="side-foot">
<button class="icon-btn side-fold-btn" data-sidebar-fold aria-label="收起侧栏" title="收起 / 展开侧栏(记忆偏好)"><svg><use href="#i-chevrons"/></svg></button>
<span class="avatar avatar--sm avatar--user">舟</span>
<span style="font-size:12.5px">云舟</span>
<button class="icon-btn" data-theme-toggle style="margin-left:auto" aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</div>
</aside>
<main class="main">
<header class="topbar">
<div class="crumbs"><span class="cn">镜生</span><span class="crumbs__sep">/</span><span class="here">青梧</span></div>
<div class="topbar__spacer"></div>
<span class="prototype-tag">静态原型 · 待审查</span>
<button class="icon-btn" aria-label="搜索"><svg><use href="#i-search"/></svg></button>
<button class="icon-btn" aria-label="通知"><svg><use href="#i-bell"/></svg></button>
</header>
<div class="content content--wide">
<div class="char-layout">
<!-- 左:角色列表 -->
<div>
<div class="card" style="padding:10px">
<div style="display:flex;justify-content:space-between;align-items:center;padding:4px 8px 10px">
<span class="cn" style="font-size:15px;font-weight:600">镜生<span class="cn__plain">4 位角色</span></span>
<button class="btn btn--outline btn--sm"><svg><use href="#i-plus"/></svg>创建</button>
</div>
<div class="char-list-item is-active" aria-current="page">
<span class="avatar">梧</span>
<div style="flex:1">
<div class="char-list-item__name">青梧</div>
<div class="char-list-item__sub">守砚人 · 道体 v3</div>
</div>
<span class="badge badge--info badge--sm" style="font-size:11px;padding:1px 8px"><span class="badge__dot"></span>临照</span>
</div>
<div class="char-list-item">
<span class="avatar">袖</span>
<div style="flex:1">
<div class="char-list-item__name">雪袖</div>
<div class="char-list-item__sub">茶室主人 · 道体 v1</div>
</div>
<span class="badge badge--muted" style="font-size:11px;padding:1px 8px"><span class="badge__dot"></span>守一</span>
</div>
<div class="char-list-item">
<span class="avatar">澜</span>
<div style="flex:1">
<div class="char-list-item__name">观澜</div>
<div class="char-list-item__sub">航海士 · 道体 v2</div>
</div>
<span class="badge badge--muted" style="font-size:11px;padding:1px 8px"><span class="badge__dot"></span>静修</span>
</div>
<div class="char-list-item">
<span class="avatar" style="filter:grayscale(.7);opacity:.75">岁</span>
<div style="flex:1">
<div class="char-list-item__name">旧岁</div>
<div class="char-list-item__sub">守岁人 · 归藏</div>
</div>
<span class="badge badge--muted" style="font-size:11px;padding:1px 8px"><span class="badge__dot"></span>归藏</span>
</div>
<div style="border-top:1px solid var(--line-soft);margin-top:8px;padding-top:8px">
<a class="char-list-item" href="#">
<svg style="width:24px;height:24px;color:var(--text-3)" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></svg>
<div style="flex:1">
<div class="char-list-item__name" style="font-family:var(--font-ui);font-weight:400;color:var(--text-2)">随缘 · 生成匿名灵胚候选</div>
<div class="char-list-item__sub">按偏好生成草稿 · 不是抽卡</div>
</div>
</a>
</div>
</div>
</div>
<!-- 右:角色详情 -->
<div>
<div class="char-banner" aria-hidden="true"></div>
<div class="char-head">
<span class="avatar avatar--lg">梧</span>
<div class="char-head__title">
<h2>青梧 <span class="badge badge--info"><span class="badge__dot"></span>临照 · 前台运行 <span class="mono">running</span></span></h2>
<div class="char-head__motto cn">「砚为田,字为稼。」<span class="cn__plain">守砚人 · 你与我共读的第三年</span></div>
<div style="display:flex;gap:8px;flex-wrap:wrap">
<span class="mem-type">道体 v3</span>
<span class="mem-type">镜域 · 个人域</span>
<span class="mem-type">来源 · 手动创建</span>
</div>
</div>
<div class="char-head__actions">
<a class="btn btn--primary" href="conversation.html">进入镜树</a>
<button class="btn btn--outline"><svg><use href="#i-download"/></svg>导出魂籍</button>
</div>
</div>
<section class="section card">
<div class="card__head">
<span class="cn">道体<span class="cn__plain">稳定身份基线</span></span>
<span style="margin-left:auto;font-size:11.5px;color:var(--text-3);max-width:300px;text-align:right">普通对话与记忆不能静默覆盖道体</span>
</div>
<p style="font-size:13.5px;color:var(--text-2);line-height:1.75">
青梧是江南书斋的守砚人:语调平缓,好引张岱与《陶庵梦忆》;记账一丝不苟,惜字如金。
<strong style="color:var(--text-1)">基线由 v1 逐步重映而来</strong>——人格、语言风格与知识边界在版本中留痕,任何重大改动都会先成候选、经你确认。
</p>
</section>
<section class="section card">
<div class="card__head">
<span class="cn">缘契<span class="cn__plain">你与青梧的关系</span></span>
<span class="badge" style="margin-left:auto"><span class="badge__dot" style="background:var(--accent)"></span>共读者 · v4</span>
</div>
<p style="font-size:13.5px;color:var(--text-2)">「隔周四晚共读,青梧负责选篇与笔记;你不喜长篇说教。」——最近一次铭契于 8 月 28 日确认,旧关系状态保留版本可查。</p>
</section>
<section class="section card">
<div class="card__head">
<span class="cn">内驱力<span class="cn__plain">动机与倾向维度 · 可审阅编辑</span></span>
<button class="btn btn--ghost btn--sm" style="margin-left:auto">编辑</button>
</div>
<div class="drive-row"><span class="firefly firefly--bright" title="内驱力亮度 = 维度值" aria-hidden="true"></span><span class="drive-row__label">求知</span><div class="progress"><div class="progress__bar" style="width:80%"></div></div><span class="drive-row__val">0.80</span></div>
<div class="drive-row"><span class="firefly" aria-hidden="true"></span><span class="drive-row__label">条理</span><div class="progress"><div class="progress__bar" style="width:65%"></div></div><span class="drive-row__val">0.65</span></div>
<div class="drive-row"><span class="firefly firefly--dim" aria-hidden="true"></span><span class="drive-row__label">陪伴</span><div class="progress"><div class="progress__bar" style="width:40%"></div></div><span class="drive-row__val">0.40</span></div>
<p style="font-size:12px;color:var(--text-3);margin-top:8px">内驱力是声明式设定数据,不是不可控本能;变化与大周天评估相关,每次调整版本化留痕。</p>
</section>
<section class="section card">
<div class="card__head">
<span class="cn">大周天<span class="cn__plain">自我评估与演化循环</span></span>
<span class="badge badge--ok" style="margin-left:auto"><span class="badge__dot"></span>已成 · 第 7 轮 <span class="mono">completed</span></span>
</div>
<div class="cycle-mirrors" role="group" aria-label="大周天四阶段">
<div class="cycle-mirror is-done"><span class="cycle-mirror__disc">回</span><span class="cycle-mirror__name">回顾</span><span class="cycle-mirror__state">已成 · 09-14</span></div>
<span class="cycle-mirror__link" aria-hidden="true"></span>
<div class="cycle-mirror is-done"><span class="cycle-mirror__disc">照</span><span class="cycle-mirror__name">对照</span><span class="cycle-mirror__state">已成 · 09-14</span></div>
<span class="cycle-mirror__link" aria-hidden="true"></span>
<div class="cycle-mirror is-done"><span class="cycle-mirror__disc">议</span><span class="cycle-mirror__name">提议</span><span class="cycle-mirror__state">已成 · 09-15</span></div>
<span class="cycle-mirror__link" aria-hidden="true"></span>
<div class="cycle-mirror is-active"><span class="cycle-mirror__disc">呈</span><span class="cycle-mirror__name">提交</span><span class="cycle-mirror__state">2 项待你确认</span></div>
</div>
<p style="font-size:12.5px;color:var(--text-2)">本轮由 42 次小周天完成信号触发 · 预算 5k token(实用 3.1k)· 产出:人格候选 1、世界认知候选 1。<span style="color:var(--text-3)">演化经你确认才生效;循环可整体关闭。</span></p>
<div style="display:flex;gap:8px;margin-top:10px">
<button class="btn btn--outline btn--sm">审阅候选</button>
<button class="btn btn--ghost btn--sm">查看本轮输入与费用</button>
</div>
</section>
<section class="section card">
<div class="card__head">
<span class="cn">身份谱系<span class="cn__plain">来源与重大演变</span></span>
<span class="more" style="color:var(--text-3);cursor:default">完整谱系 · 见下方时间线</span>
</div>
<div class="timeline">
<div class="timeline__item">
<div class="timeline__date">2024-03-02</div>
<div class="timeline__title cn">启镜 · 正式创建</div>
<div class="timeline__sub">手动创建 · 道体 v1 · 初照自陈已归真</div>
</div>
<div class="timeline__item">
<div class="timeline__date">2025-06-18</div>
<div class="timeline__title cn">重映 · 道体 v2</div>
<div class="timeline__sub">语言风格修订 · 旧版本保留</div>
</div>
<div class="timeline__item">
<div class="timeline__date">2026-01-11</div>
<div class="timeline__title cn">分灵 · 雪袖自此谱系分出</div>
<div class="timeline__sub">新角色新 ID · 谱系可验证 · 不冒充原角色</div>
</div>
<div class="timeline__item">
<div class="timeline__date">2026-08-28</div>
<div class="timeline__title cn">重映 · 道体 v3(当前)</div>
<div class="timeline__sub">知识边界修订 · 经候选确认</div>
</div>
</div>
</section>
<section class="section card danger-zone">
<div class="card__head">
<span class="cn">生命周期<span class="cn__plain">影响角色状态的操作 · 均可逆或有冷静期,与数据删除分离</span></span>
</div>
<div style="display:flex;gap:10px;flex-wrap:wrap">
<button class="btn btn--outline btn--sm">静修 · 停止运行</button>
<button class="btn btn--outline btn--sm">归藏 · 隐藏可恢复</button>
<button class="btn btn--outline btn--sm">复照 · 从旧版本重开</button>
<button class="btn btn--danger btn--sm">铸魂 · 重大重塑(强确认)</button>
<button class="btn btn--danger btn--sm">死亡 · 永久闭合(冷静期)</button>
</div>
<p style="font-size:12px;color:var(--text-3);margin-top:10px">铸魂与死亡均走强确认与谱系留痕;死亡不等于删除数据,只读档案保留。删除角色数据是独立操作,入口在司命台。</p>
</section>
</div>
</div>
</div>
</main>
</div>
<script src="assets/app.js?v=3"></script>
</body>
</html>
+114
View File
@@ -0,0 +1,114 @@
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>同契台 · 协作空间 — 魂镜 Hunjing</title>
<link rel="stylesheet" href="assets/app.css?v=10">
</head>
<body>
<svg style="display:none" aria-hidden="true"><symbol id="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></symbol><symbol id="i-home" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="M9 22V12h6v10"/></symbol><symbol id="i-branch" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="6" y1="3" x2="6" y2="15"/><circle cx="18" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/></symbol><symbol id="i-user" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></symbol><symbol id="i-book" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></symbol><symbol id="i-layers" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"/><polyline points="2 17 12 22 22 17"/><polyline points="2 12 12 17 22 12"/></symbol><symbol id="i-kanban" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3h4v18H5z"/><path d="M10 3h4v12h-4z"/><path d="M15 3h4v8h-4z"/></symbol><symbol id="i-package" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></symbol><symbol id="i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></symbol><symbol id="i-route" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="19" r="3"/><circle cx="18" cy="5" r="3"/><path d="M12 19h4.5a3.5 3.5 0 0 0 0-7h-9a3.5 3.5 0 0 1 0-7H12"/></symbol><symbol id="i-globe" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></symbol><symbol id="i-bag" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 0 1-8 0"/></symbol><symbol id="i-shield" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></symbol><symbol id="i-monitor" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></symbol><symbol id="i-sliders" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></symbol><symbol id="i-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></symbol><symbol id="i-x" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></symbol><symbol id="i-clock" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></symbol><symbol id="i-merge" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-lLine truncated
</svg>
<div class="app">
<aside class="sidebar">
<div class="brand">
<div class="brand__mark" aria-hidden="true"></div>
<div class="brand__text">
<div class="brand__name">魂镜</div>
<div class="brand__sub">Hunjing</div>
</div>
</div>
<nav class="side-nav" aria-label="主导航"><div class="nav-group"><div class="nav-group__title">常用</div><a class="nav-item" href="home.html"><svg><use href="#i-home"/></svg><span class="cn">镜庭</span><span class="nav-plain">首页</span></a><a class="nav-item" href="conversation.html"><svg><use href="#i-branch"/></svg><span class="cn">镜树</span><span class="nav-plain">对话</span></a><a class="nav-item" href="characters.html"><svg><use href="#i-user"/></svg><span class="cn">镜生</span><span class="nav-plain">角色</span></a><a class="nav-item" href="memory.html"><svg><use href="#i-book"/></svg><span class="cn">息壤</span><span class="nav-plain">记忆</span></a><a class="nav-item" href="avatar.html"><svg><use href="#i-layers"/></svg><span class="cn">形仪</span><span class="nav-plain">形象</span></a></div><div class="nav-group"><div class="nav-group__title">创造</div><a class="nav-item" href="agent-workspace.html"><svg><use href="#i-kanban"/></svg><span class="cn">天工阁</span><span class="nav-plain">任务</span></a><a class="nav-item" href="plugins.html"><svg><use href="#i-package"/></svg><span class="cn">百工坊</span><span class="nav-plain">插件</span></a><a class="nav-item is-active" aria-current="page" href="collaboration.html"><svg><use href="#i-users"/></svg><span class="cn">同契台</span><span class="nav-plain">协作</span></a><a class="nav-item" href="model-gateway.html"><svg><use href="#i-route"/></svg><span class="cn">神识阁</span><span class="nav-plain">模型</span></a></div><div class="nav-group"><div class="nav-group__title">世界</div><a class="nav-item" href="community.html"><svg><use href="#i-globe"/></svg><span class="cn">雅集</span><span class="nav-plain">社区</span></a><a class="nav-item" href="marketplace.html"><svg><use href="#i-bag"/></svg><span class="cn">云市</span><span class="nav-plain">市场</span></a></div><div class="nav-group"><div class="nav-group__title">治理与账户</div><a class="nav-item" href="governance.html"><svg><use href="#i-shield"/></svg><span class="cn">司命台</span><span class="nav-plain">治理</span></a><a class="nav-item" href="devices.html"><svg><use href="#i-monitor"/></svg><span class="cn">器谱</span><span class="nav-plain">设备</span></a><a class="nav-item" href="settings.html"><svg><use href="#i-sliders"/></svg><span class="cn">设置</span><span class="nav-plain">账户</span></a></div></nav>
<div class="side-foot">
<button class="icon-btn side-fold-btn" data-sidebar-fold aria-label="收起侧栏" title="收起 / 展开侧栏(记忆偏好)"><svg><use href="#i-chevrons"/></svg></button>
<span class="avatar avatar--sm avatar--user">舟</span>
<span style="font-size:12.5px">云舟</span>
<button class="icon-btn" data-theme-toggle style="margin-left:auto" aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</div>
</aside>
<main class="main">
<header class="topbar">
<div class="crumbs"><span class="cn">同契台</span><span class="crumbs__sep">/</span><span class="here">镜斋工作室</span></div>
<div class="topbar__spacer"></div>
<span class="prototype-tag">静态原型 · 待审查</span>
<button class="icon-btn" data-theme-toggle aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</header>
<div class="content">
<div class="char-head" style="margin-bottom:20px">
<span class="avatar avatar--lg">斋</span>
<div class="char-head__title">
<h2>镜斋工作室 <span class="badge badge--info"><span class="badge__dot"></span>共修 · 2 人在线 <span class="mono">editing</span></span></h2>
<div class="char-head__motto">成员 4 · 邀请制 · 编辑 / 发布 / 财务权限分别授予</div>
</div>
<div class="char-head__actions">
<button class="btn btn--outline">邀请成员</button>
<button class="btn btn--primary">进入共修</button>
</div>
</div>
<div class="char-layout">
<div>
<div class="card" style="padding:10px">
<div style="padding:4px 8px 10px"><span class="cn" style="font-size:15px;font-weight:600">分支<span class="cn__plain">版本</span></span></div>
<div class="char-list-item is-active" aria-current="page">
<div style="flex:1"><div class="char-list-item__name" style="font-family:var(--font-ui)">选篇修订</div><div class="char-list-item__sub">v3 草稿 · 审稿意见 2</div></div>
<span class="badge badge--warn" style="font-size:11px;padding:1px 8px"><span class="badge__dot"></span>审稿中</span>
</div>
<div class="char-list-item">
<div style="flex:1"><div class="char-list-item__name" style="font-family:var(--font-ui)">main</div><div class="char-list-item__sub">v12 · 已刊 · 共读手册</div></div>
<span class="badge badge--ok" style="font-size:11px;padding:1px 8px"><span class="badge__dot"></span>已刊</span>
</div>
<div class="char-list-item">
<div style="flex:1"><div class="char-list-item__name" style="font-family:var(--font-ui)">资产重制</div><div class="char-list-item__sub">v1 草稿 · Live2D 分层</div></div>
<span class="badge badge--muted" style="font-size:11px;padding:1px 8px"><span class="badge__dot"></span>草稿</span>
</div>
</div>
</div>
<div>
<section class="section card">
<div class="card__head"><span class="cn">选篇修订<span class="cn__plain">v3 草稿</span></span><button class="btn btn--primary btn--sm" style="margin-left:auto">提交合卷</button></div>
<div class="timeline">
<div class="timeline__item"><div class="timeline__date">09-14 21:30</div><div class="timeline__title">v3 草稿 · 云舟</div><div class="timeline__sub">按青梧建议调整三、四讲顺序</div></div>
<div class="timeline__item"><div class="timeline__date">09-14 22:10</div><div class="timeline__title">审稿意见 ×2 · 阿沉</div><div class="timeline__sub">「定海水操放第五讲更顺」「附页地图需更新版本」</div></div>
<div class="timeline__item timeline__item--muted"><div class="timeline__date">09-10 19:00</div><div class="timeline__title">v2 合卷 · 已并入 main</div><div class="timeline__sub">冲突 1 处已手工处理</div></div>
</div>
<div style="display:flex;gap:10px;margin-top:14px">
<button class="btn btn--outline btn--sm"><svg><use href="#i-check"/></svg>批准本稿</button>
<button class="btn btn--outline btn--sm"><svg><use href="#i-x"/></svg>请求修改</button>
<span style="font-size:12px;color:var(--text-3);align-self:center">批准后需两名编辑合卷方可并入 main</span>
</div>
</section>
<section class="section card">
<div class="card__head"><span class="cn">成员权限<span class="cn__plain">编辑 / 发布 / 上架 / 财务分离</span></span></div>
<div class="table-wrap"><table class="data">
<thead><tr><th>成员</th><th>编辑</th><th>发布</th><th>市场上架</th><th>财务</th></tr></thead>
<tbody>
<tr><td>云舟(主理)</td><td class="mark-ok">✓</td><td class="mark-ok">✓</td><td class="mark-ok">✓</td><td class="mark-ok">✓</td></tr>
<tr><td>阿沉</td><td class="mark-ok">✓</td><td class="mark-ok">✓</td><td class="mark-no">—</td><td class="mark-no">—</td></tr>
<tr><td>临江仙</td><td class="mark-ok">✓</td><td class="mark-no">—</td><td class="mark-no">—</td><td class="mark-no">—</td></tr>
<tr><td>山客(只读)</td><td class="mark-no">—</td><td class="mark-no">—</td><td class="mark-no">—</td><td class="mark-no">—</td></tr>
</tbody>
</table></div>
<p style="font-size:12px;color:var(--text-3);margin-top:10px">成员移除后立即失去编辑权;已合并版本的署名与来源保留。</p>
</section>
<section class="section card">
<div class="card__head"><span class="cn">活动记录</span></div>
<div class="timeline">
<div class="timeline__item"><div class="timeline__date">09-14 22:10</div><div class="timeline__title">阿沉 提交审稿意见</div></div>
<div class="timeline__item"><div class="timeline__date">09-12 10:05</div><div class="timeline__title">云舟 创建分支「选篇修订」</div></div>
<div class="timeline__item"><div class="timeline__date">09-10 19:00</div><div class="timeline__title">v2 合卷并入 main(两名编辑批准)</div></div>
</div>
</section>
</div>
</div>
</div>
</main>
</div>
<script src="assets/app.js?v=3"></script>
</body>
</html>
+141
View File
@@ -0,0 +1,141 @@
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>雅集 · 社区广场 — 魂镜 Hunjing</title>
<link rel="stylesheet" href="assets/app.css?v=10">
</head>
<body>
<svg style="display:none" aria-hidden="true"><symbol id="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></symbol><symbol id="i-home" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="M9 22V12h6v10"/></symbol><symbol id="i-branch" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="6" y1="3" x2="6" y2="15"/><circle cx="18" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/></symbol><symbol id="i-user" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></symbol><symbol id="i-book" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></symbol><symbol id="i-layers" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"/><polyline points="2 17 12 22 22 17"/><polyline points="2 12 12 17 22 12"/></symbol><symbol id="i-kanban" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3h4v18H5z"/><path d="M10 3h4v12h-4z"/><path d="M15 3h4v8h-4z"/></symbol><symbol id="i-package" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></symbol><symbol id="i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></symbol><symbol id="i-route" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="19" r="3"/><circle cx="18" cy="5" r="3"/><path d="M12 19h4.5a3.5 3.5 0 0 0 0-7h-9a3.5 3.5 0 0 1 0-7H12"/></symbol><symbol id="i-globe" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></symbol><symbol id="i-bag" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 0 1-8 0"/></symbol><symbol id="i-shield" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></symbol><symbol id="i-monitor" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></symbol><symbol id="i-sliders" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></symbol><symbol id="i-heart" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></symbol><symbol id="i-quote" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z"/><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z"/></symbol><symbolLine truncated
</svg>
<div class="app">
<aside class="sidebar">
<div class="brand">
<div class="brand__mark" aria-hidden="true"></div>
<div class="brand__text">
<div class="brand__name">魂镜</div>
<div class="brand__sub">Hunjing</div>
</div>
</div>
<nav class="side-nav" aria-label="主导航"><div class="nav-group"><div class="nav-group__title">常用</div><a class="nav-item" href="home.html"><svg><use href="#i-home"/></svg><span class="cn">镜庭</span><span class="nav-plain">首页</span></a><a class="nav-item" href="conversation.html"><svg><use href="#i-branch"/></svg><span class="cn">镜树</span><span class="nav-plain">对话</span></a><a class="nav-item" href="characters.html"><svg><use href="#i-user"/></svg><span class="cn">镜生</span><span class="nav-plain">角色</span></a><a class="nav-item" href="memory.html"><svg><use href="#i-book"/></svg><span class="cn">息壤</span><span class="nav-plain">记忆</span></a><a class="nav-item" href="avatar.html"><svg><use href="#i-layers"/></svg><span class="cn">形仪</span><span class="nav-plain">形象</span></a></div><div class="nav-group"><div class="nav-group__title">创造</div><a class="nav-item" href="agent-workspace.html"><svg><use href="#i-kanban"/></svg><span class="cn">天工阁</span><span class="nav-plain">任务</span></a><a class="nav-item" href="plugins.html"><svg><use href="#i-package"/></svg><span class="cn">百工坊</span><span class="nav-plain">插件</span></a><a class="nav-item" href="collaboration.html"><svg><use href="#i-users"/></svg><span class="cn">同契台</span><span class="nav-plain">协作</span></a><a class="nav-item" href="model-gateway.html"><svg><use href="#i-route"/></svg><span class="cn">神识阁</span><span class="nav-plain">模型</span></a></div><div class="nav-group"><div class="nav-group__title">世界</div><a class="nav-item is-active" aria-current="page" href="community.html"><svg><use href="#i-globe"/></svg><span class="cn">雅集</span><span class="nav-plain">社区</span></a><a class="nav-item" href="marketplace.html"><svg><use href="#i-bag"/></svg><span class="cn">云市</span><span class="nav-plain">市场</span></a></div><div class="nav-group"><div class="nav-group__title">治理与账户</div><a class="nav-item" href="governance.html"><svg><use href="#i-shield"/></svg><span class="cn">司命台</span><span class="nav-plain">治理</span></a><a class="nav-item" href="devices.html"><svg><use href="#i-monitor"/></svg><span class="cn">器谱</span><span class="nav-plain">设备</span></a><a class="nav-item" href="settings.html"><svg><use href="#i-sliders"/></svg><span class="cn">设置</span><span class="nav-plain">账户</span></a></div></nav>
<div class="side-foot">
<button class="icon-btn side-fold-btn" data-sidebar-fold aria-label="收起侧栏" title="收起 / 展开侧栏(记忆偏好)"><svg><use href="#i-chevrons"/></svg></button>
<span class="avatar avatar--sm avatar--user">舟</span>
<span style="font-size:12.5px">云舟</span>
<button class="icon-btn" data-theme-toggle style="margin-left:auto" aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</div>
</aside>
<main class="main">
<header class="topbar">
<div class="crumbs"><span class="cn">雅集</span><span class="crumbs__sep">·</span><span class="here">社区广场</span></div>
<div class="topbar__spacer"></div>
<span class="prototype-tag">静态原型 · 待审查</span>
<button class="icon-btn" data-theme-toggle aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</header>
<div class="content">
<div style="display:flex;gap:12px;align-items:center;margin-bottom:18px;flex-wrap:wrap">
<div class="chips" style="margin-bottom:0">
<button class="chip is-on">动态</button>
<button class="chip">角色谱</button>
<button class="chip">作品</button>
<button class="chip">世界设定</button>
<button class="chip">关注</button>
</div>
<div class="searchbar" style="flex:1;min-width:200px">
<svg><use href="#i-search"/></svg>
<input type="search" placeholder="搜索社区:作者 / 角色 / 话题 / 世界" aria-label="搜索社区">
</div>
<button class="btn btn--primary">发布</button>
</div>
<div class="two-col">
<div>
<div class="card post" style="margin-bottom:14px">
<div class="post__head">
<span class="avatar avatar--sm">沉</span>
<div><div class="post__author">沉舟 <span style="font-size:11.5px;color:var(--text-3)">· 9 月 14 日</span></div></div>
<span class="badge badge--ok" style="margin-left:auto"><span class="badge__dot"></span>角色发布 <span class="mono">published</span></span>
</div>
<div class="post__body">
<p style="color:var(--text-1);font-size:14.5px" class="cn">发布角色「照夜 · 掌灯人」<span class="cn__plain">v2 · 市契 CC BY-NC 4.0</span></p>
<p>渡口掌灯的角色,话少但记得每个过客的名字。基于我自己的镜生谱系重映而来,Fork 请保留署名。</p>
<div style="display:flex;gap:8px;flex-wrap:wrap">
<span class="mem-type">许可 · CC BY-NC</span><span class="mem-type">分灵谱系 · 可验证</span><span class="mem-type">分级 · 全年龄</span>
</div>
</div>
<div class="post__foot">
<button class="act-btn"><svg><use href="#i-heart"/></svg>128</button>
<button class="act-btn"><svg><use href="#i-quote"/></svg>评论 23</button>
<button class="act-btn">收藏 45</button>
<button class="act-btn">Fork 12</button>
<button class="act-btn" style="margin-left:auto"><svg><use href="#i-flag"/></svg>鸣冤</button>
</div>
</div>
<div class="card post" style="margin-bottom:14px">
<div class="post__head">
<span class="avatar avatar--sm">梧</span>
<div><div class="post__author">青梧与云舟 <span style="font-size:11.5px;color:var(--text-3)">· 9 月 13 日</span></div></div>
</div>
<div class="post__body">
<p>共读《陶庵梦忆》第一讲笔记:湖心亭那一百六十字,读三遍的方法真的有效。附角色整理的选篇结构图。</p>
<blockquote class="quote">莫说相公痴,更有痴似相公者。<span class="quote__src">引文锚 · 《湖心亭看雪》</span></blockquote>
</div>
<div class="post__foot">
<button class="act-btn"><svg><use href="#i-heart"/></svg>86</button>
<button class="act-btn"><svg><use href="#i-quote"/></svg>评论 14</button>
<button class="act-btn">收藏 31</button>
<button class="act-btn" style="margin-left:auto"><svg><use href="#i-flag"/></svg>鸣冤</button>
</div>
</div>
<div class="card post">
<div class="post__head">
<span class="avatar avatar--sm">袖</span>
<div><div class="post__author">雪袖的茶寮 <span style="font-size:11.5px;color:var(--text-3)">· 9 月 12 日</span></div></div>
<span class="badge badge--ok" style="margin-left:auto"><span class="badge__dot"></span>世界设定 <span class="mono">published</span></span>
</div>
<div class="post__body">
<p style="color:var(--text-1);font-size:14.5px" class="cn">世界「雾中茶寮」第三章<span class="cn__plain">境界 · 世界正史 v5</span></p>
<p>雨季的茶寮只在雾散时开门。本章收录 6 个新场景与 2 位过客的世界认知候选来源说明。</p>
</div>
<div class="post__foot">
<button class="act-btn"><svg><use href="#i-heart"/></svg>54</button>
<button class="act-btn"><svg><use href="#i-quote"/></svg>评论 9</button>
<button class="act-btn">收藏 22</button>
<button class="act-btn" style="margin-left:auto"><svg><use href="#i-flag"/></svg>鸣冤</button>
</div>
</div>
</div>
<div>
<section class="card" style="margin-bottom:14px">
<div class="card__head"><span class="cn">角色谱<span class="cn__plain">角色社区精选</span></span><span class="more" style="color:var(--text-3);cursor:default">全部 · 角色谱整页在 React 阶段实现</span></div>
<div class="list-row"><span class="avatar avatar--sm">夜</span><div class="list-row__body"><div class="list-row__title">照夜 · 掌灯人</div><div class="list-row__sub">沉舟 · Fork 128 · 全年龄</div></div></div>
<div class="list-row"><span class="avatar avatar--sm">筑</span><div class="list-row__body"><div class="list-row__title">筑秋 · 修槎人</div><div class="list-row__sub">临江仙 · Fork 76</div></div></div>
<div class="list-row"><span class="avatar avatar--sm">岱</span><div class="list-row__body"><div class="list-row__title">岱舆 · 观星者</div><div class="list-row__sub">山客 · Fork 54</div></div></div>
</section>
<section class="card" style="margin-bottom:14px">
<div class="card__head"><span class="cn">话题</span></div>
<div style="display:flex;gap:8px;flex-wrap:wrap">
<span class="mem-type">#陶庵梦忆</span><span class="mem-type">#共读笔记</span><span class="mem-type">#Live2D</span><span class="mem-type">#雾中茶寮</span><span class="mem-type">#守砚人</span>
</div>
</section>
<section class="card">
<div class="card__head"><span class="cn">推荐解释<span class="cn__plain">为什么看到这些</span></span></div>
<p style="font-size:12.5px;color:var(--text-2);margin-bottom:10px">当前动态基于你最近的共读活动与关注关系排序。推荐不扩大任何权限,也不使用你的私密角色数据。</p>
<button class="btn btn--outline btn--sm">重置推荐特征</button>
</section>
</div>
</div>
</div>
</main>
</div>
<script src="assets/app.js?v=3"></script>
</body>
</html>
+552
View File
@@ -0,0 +1,552 @@
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>镜树 · 分支对话 — 魂镜 Hunjing</title>
<link rel="stylesheet" href="assets/app.css?v=10">
</head>
<body>
<svg style="display:none" aria-hidden="true">
<symbol id="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></symbol>
<symbol id="i-home" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="M9 22V12h6v10"/></symbol>
<symbol id="i-branch" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="6" y1="3" x2="6" y2="15"/><circle cx="18" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/></symbol>
<symbol id="i-book" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></symbol>
<symbol id="i-user" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></symbol>
<symbol id="i-layers" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"/><polyline points="2 17 12 22 22 17"/><polyline points="2 12 12 17 22 12"/></symbol>
<symbol id="i-kanban" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3h4v18H5z"/><path d="M10 3h4v12h-4z"/><path d="M15 3h4v8h-4z"/></symbol>
<symbol id="i-package" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></symbol>
<symbol id="i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></symbol>
<symbol id="i-bag" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 0 1-8 0"/></symbol>
<symbol id="i-shield" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></symbol>
<symbol id="i-plus" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></symbol>
<symbol id="i-search" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></symbol>
<symbol id="i-send" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="22" y1="2" x2="11" y2="13"/><polygon points="22 2 15 22 11 13 2 9 22 2"/></symbol>
<symbol id="i-paperclip" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"/></symbol>
<symbol id="i-image" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="8.5" cy="8.5" r="1.5"/><polyline points="21 15 16 10 5 21"/></symbol>
<symbol id="i-mic" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"/><path d="M19 10v2a7 7 0 0 1-14 0v-2"/><line x1="12" y1="19" x2="12" y2="23"/></symbol>
<symbol id="i-refresh" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"/><path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"/></symbol>
<symbol id="i-quote" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z"/><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z"/></symbol>
<symbol id="i-split" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><path d="M13 6h3a2 2 0 0 1 2 2v7"/><path d="M6 9v12"/></symbol>
<symbol id="i-more" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/><circle cx="5" cy="12" r="1"/></symbol>
<symbol id="i-play" viewBox="0 0 24 24" fill="currentColor" stroke="none"><polygon points="6 3 21 12 6 21 6 3"/></symbol>
<symbol id="i-arrow-right" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></symbol>
<symbol id="i-route" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="19" r="3"/><circle cx="18" cy="5" r="3"/><path d="M12 19h4.5a3.5 3.5 0 0 0 0-7h-9a3.5 3.5 0 0 1 0-7H12"/></symbol>
<symbol id="i-globe" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></symbol>
<symbol id="i-monitor" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></symbol>
<symbol id="i-sliders" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></symbol>
<symbol id="i-chevrons" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="11 17 6 12 11 7"/><polyline points="18 17 13 12 18 7"/></symbol>
</svg>
<div class="app">
<aside class="sidebar">
<div class="brand">
<div class="brand__mark" aria-hidden="true"></div>
<div class="brand__text">
<div class="brand__name">魂镜</div>
<div class="brand__sub">Hunjing</div>
</div>
</div>
<nav class="side-nav" aria-label="主导航"><div class="nav-group"><div class="nav-group__title">常用</div><a class="nav-item" href="home.html"><svg><use href="#i-home"/></svg><span class="cn">镜庭</span><span class="nav-plain">首页</span></a><a class="nav-item is-active" aria-current="page" href="conversation.html"><svg><use href="#i-branch"/></svg><span class="cn">镜树</span><span class="nav-plain">对话</span></a><a class="nav-item" href="characters.html"><svg><use href="#i-user"/></svg><span class="cn">镜生</span><span class="nav-plain">角色</span></a><a class="nav-item" href="memory.html"><svg><use href="#i-book"/></svg><span class="cn">息壤</span><span class="nav-plain">记忆</span></a><a class="nav-item" href="avatar.html"><svg><use href="#i-layers"/></svg><span class="cn">形仪</span><span class="nav-plain">形象</span></a></div><div class="nav-group"><div class="nav-group__title">创造</div><a class="nav-item" href="agent-workspace.html"><svg><use href="#i-kanban"/></svg><span class="cn">天工阁</span><span class="nav-plain">任务</span></a><a class="nav-item" href="plugins.html"><svg><use href="#i-package"/></svg><span class="cn">百工坊</span><span class="nav-plain">插件</span></a><a class="nav-item" href="collaboration.html"><svg><use href="#i-users"/></svg><span class="cn">同契台</span><span class="nav-plain">协作</span></a><a class="nav-item" href="model-gateway.html"><svg><use href="#i-route"/></svg><span class="cn">神识阁</span><span class="nav-plain">模型</span></a></div><div class="nav-group"><div class="nav-group__title">世界</div><a class="nav-item" href="community.html"><svg><use href="#i-globe"/></svg><span class="cn">雅集</span><span class="nav-plain">社区</span></a><a class="nav-item" href="marketplace.html"><svg><use href="#i-bag"/></svg><span class="cn">云市</span><span class="nav-plain">市场</span></a></div><div class="nav-group"><div class="nav-group__title">治理与账户</div><a class="nav-item" href="governance.html"><svg><use href="#i-shield"/></svg><span class="cn">司命台</span><span class="nav-plain">治理</span></a><a class="nav-item" href="devices.html"><svg><use href="#i-monitor"/></svg><span class="cn">器谱</span><span class="nav-plain">设备</span></a><a class="nav-item" href="settings.html"><svg><use href="#i-sliders"/></svg><span class="cn">设置</span><span class="nav-plain">账户</span></a></div></nav>
<div class="side-foot">
<button class="icon-btn side-fold-btn" data-sidebar-fold aria-label="收起侧栏" title="收起 / 展开侧栏(记忆偏好)"><svg><use href="#i-chevrons"/></svg></button>
<span class="avatar avatar--sm avatar--user">舟</span>
<span style="font-size:12.5px">云舟</span>
<button class="icon-btn" data-theme-toggle style="margin-left:auto" aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</div>
</aside>
<main class="main">
<header class="topbar">
<div class="crumbs">
<span class="cn">镜树</span><span class="crumbs__sep">/</span><span class="here">《陶庵梦忆》共读选篇</span>
</div>
<div class="seg" data-realm role="group" aria-label="对话界域切换">
<button class="seg__item is-on" data-realm="reality" aria-pressed="true" data-banner-html='真界 · 当前是现实与正式共同经历的界域,内容按记忆策略进入长期记忆。'><span class="cn">真界</span>现实</button>
<button class="seg__item" data-realm="world" aria-pressed="false" data-banner-html='境界 · 版本化维护的世界正史界域;内容只成世界知识候选。'><span class="cn">境界</span>世界正史</button>
<button class="seg__item seg__item--sim" data-realm="sim" aria-pressed="false" data-banner-html='幻境 · 临时试演界域:不影响现实与正史,不自动入忆;离开即留痕可查。'><span class="cn">幻境</span>试演</button>
</div>
<span class="realm-dot" style="font-size:12px">真界</span>
<div class="topbar__spacer"></div>
<span class="prototype-tag">静态原型 · 待审查</span>
<button class="icon-btn" data-theme-toggle aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</header>
<div class="conv-layout">
<!-- 左:会话列表 -->
<aside class="conv-side" aria-label="会话列表">
<div class="conv-side__head">
<span class="avatar avatar--sm">梧</span>
<div style="flex:1">
<div class="cn" style="font-weight:600">青梧</div>
<div style="font-size:11px;color:var(--text-3)">道体 v3 · 临照</div>
</div>
<button class="panel-toggle" data-panel-fold="left" aria-label="收起会话列表" title="收起会话列表" style="margin-left:4px"><svg><use href="#i-chevrons"/></svg></button>
<button class="icon-btn" aria-label="新对话"><svg><use href="#i-plus"/></svg></button>
</div>
<div class="conv-group__title">今日</div>
<a class="conv-item is-active" href="conversation.html" aria-current="page">
<div class="conv-item__title"><span class="conv-item__dot conv-item__dot--active" title="活跃"></span><span class="cn" style="font-weight:500">《陶庵梦忆》共读选篇</span></div>
<div class="conv-item__sub">六篇已定,结构图也画好了… · 真界</div>
</a>
<div class="conv-group__title">本周</div>
<a class="conv-item" href="conversation.html">
<div class="conv-item__title"><span class="conv-item__dot conv-item__dot--sim" title="幻境试演"></span>书房整理方案</div>
<div class="conv-item__sub">幻境试演 · 不动真格</div>
</a>
<a class="conv-item" href="conversation.html">
<div class="conv-item__title"><span class="conv-item__dot conv-item__dot--risk" title="有权限待处理"></span>预习提纲写入</div>
<div class="conv-item__sub">请命中 · 等待朱批</div>
</a>
<div class="conv-group__title">更早</div>
<a class="conv-item" href="conversation.html">
<div class="conv-item__title"><span class="conv-item__dot"></span>砚台保养备忘</div>
<div class="conv-item__sub">已结题 · 可复照</div>
</a>
<a class="conv-item" href="conversation.html">
<div class="conv-item__title"><span class="conv-item__dot"></span>移栽:关于「移栽自读书会」</div>
<div class="conv-item__sub">从读书会树移栽而来</div>
</a>
</aside>
<!-- 中:消息流 -->
<section class="conv-main">
<button class="conv-restore conv-restore--left" data-panel-fold="left" aria-label="展开会话列表" title="展开会话列表"><svg><use href="#i-chevrons"/></svg></button>
<button class="conv-restore conv-restore--right" data-panel-fold="right" aria-label="展开分支面板" title="展开分支与上下文面板"><svg style="transform:rotate(180deg)"><use href="#i-chevrons"/></svg></button>
<div class="conv-stream">
<div class="conv-stream__inner">
<div class="realm-banner" data-realm-banner role="status">
真界 · 当前是现实与正式共同经历的界域,内容按记忆策略进入长期记忆。
</div>
<!-- 问节 ① -->
<div class="msg msg--user">
<div class="msg__meta"><span class="cn">问节</span><span class="mono">m_8a3f</span><span>2026-09-15 19:42</span></div>
<div class="bubble">帮我把读书会这学期的《陶庵梦忆》共读选篇定下来:选六篇,兼顾篇幅和趣味,大家隔周四晚讨论。</div>
</div>
<!-- 答复 ①:markdown + 表格 + mermaid + 引文锚 -->
<div class="msg">
<div class="msg--char__head">
<span class="avatar">梧</span>
<span class="msg--char__name">青梧</span>
<span class="msg--char__meta"><span class="mono" style="font-size:11px;color:var(--text-3)">道体 v3</span><span class="badge badge--ok"><span class="badge__dot"></span>已成 <span class="mono">completed</span></span></span>
</div>
<div class="msg__blocks">
<details class="think-block">
<summary>
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M12 1v4M12 19v4M4.22 4.22l2.83 2.83M16.95 16.95l2.83 2.83M1 12h4M19 12h4M4.22 19.78l2.83-2.83M16.95 7.05l2.83-2.83"/></svg>
思考 · 已收敛为摘要
<span class="think-effort">深虑 · 中</span>
<span class="think-meta">思考 1.2k token · 用时 9s</span>
<svg class="chev" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
</summary>
<div class="think-body">
<p>用户要为读书会从《陶庵梦忆》定六篇,兼顾篇幅与趣味,隔周四讨论。需要考虑:成员含两位新人(首篇宜短宜奇)、整体要有递进结构而非并列、末篇宜收束回张岱本人。以篇目字数与趣味点对照评估,湖心亭看雪最短且白描极致,适合开卷;自为墓志铭最长且是回望性文本,适合收官;中间四篇按「雪—夜—池—海」的意象递进排列。</p>
</div>
<div class="think-note">思考摘要仅本会话内可见,可丢弃重建;不写入长期记录,不进入诊断导出。</div>
</details>
<div class="block block--text">
<div class="block__body md">
<p>选好了。六篇按<strong>「起—承—转—合」</strong>推进:从最短的《湖心亭看雪》起,让新人先尝到味道;雪、夜、池、海层层铺开,末篇收在<em>自为墓志铭</em>,正好回到张岱自己。</p>
</div>
</div>
<div class="block">
<div class="block__head">选篇清单</div>
<div class="table-wrap">
<table class="data">
<thead><tr><th>次序</th><th>篇目</th><th>约字数</th><th>趣味点</th></tr></thead>
<tbody>
<tr><td>一</td><td>湖心亭看雪</td><td>160</td><td>白描极致 · 入门首选</td></tr>
<tr><td>二</td><td>卷中雪</td><td>700</td><td>炉火与夜读</td></tr>
<tr><td>三</td><td>金山夜戏</td><td>900</td><td>寺院里点灯唱戏</td></tr>
<tr><td>四</td><td>庞公池</td><td>600</td><td>枕舟而眠</td></tr>
<tr><td>五</td><td>定海水操</td><td>1100</td><td>海上观兵</td></tr>
<tr><td>六</td><td>自为墓志铭</td><td>1300</td><td>回望一生 · 收束全卷</td></tr>
</tbody>
</table>
</div>
</div>
<div class="block">
<div class="block__head"><span>mermaid</span><span>flowchart · 完成后 strict mode 渲染</span></div>
<div class="mermaid-box">
<svg viewBox="0 0 660 96" style="width:100%;min-width:560px;height:auto" role="img" aria-label="六讲推进结构示意图:起承转合四段">
<g font-family="inherit" font-size="12.5">
<rect x="8" y="28" width="128" height="40" rx="9" fill="none" stroke="var(--accent)" stroke-opacity=".55"/>
<text x="72" y="46" text-anchor="middle" fill="var(--text-1)" font-weight="600">起 · 湖心亭看雪</text>
<text x="72" y="61" text-anchor="middle" fill="var(--text-3)" font-size="10.5">第一周 · 白描</text>
<line x1="136" y1="48" x2="164" y2="48" stroke="var(--text-3)" stroke-width="1.2"/><polygon points="164,48 157,44.5 157,51.5" fill="var(--text-3)"/>
<rect x="166" y="28" width="128" height="40" rx="9" fill="none" stroke="var(--accent)" stroke-opacity=".55"/>
<text x="230" y="46" text-anchor="middle" fill="var(--text-1)" font-weight="600">承 · 雪 / 夜</text>
<text x="230" y="61" text-anchor="middle" fill="var(--text-3)" font-size="10.5">卷中雪 · 金山夜戏</text>
<line x1="294" y1="48" x2="322" y2="48" stroke="var(--text-3)" stroke-width="1.2"/><polygon points="322,48 315,44.5 315,51.5" fill="var(--text-3)"/>
<rect x="324" y="28" width="128" height="40" rx="9" fill="none" stroke="var(--accent)" stroke-opacity=".55"/>
<text x="388" y="46" text-anchor="middle" fill="var(--text-1)" font-weight="600">转 · 池 / 海</text>
<text x="388" y="61" text-anchor="middle" fill="var(--text-3)" font-size="10.5">庞公池 · 定海水操</text>
<line x1="452" y1="48" x2="480" y2="48" stroke="var(--text-3)" stroke-width="1.2"/><polygon points="480,48 473,44.5 473,51.5" fill="var(--text-3)"/>
<rect x="482" y="28" width="128" height="40" rx="9" fill="var(--accent)" fill-opacity=".12" stroke="var(--accent)" stroke-opacity=".7"/>
<text x="546" y="46" text-anchor="middle" fill="var(--accent-strong)" font-weight="600">合 · 自为墓志铭</text>
<text x="546" y="61" text-anchor="middle" fill="var(--text-3)" font-size="10.5">末周 · 回望</text>
</g>
</svg>
</div>
<div class="mermaid-cap">图 1 · 六讲推进结构(SVG 已净化 · 可缩放 / 下载 / 查看源码)</div>
</div>
<blockquote class="quote">莫说相公痴,更有痴似相公者。
<span class="quote__src">引文锚 · 《陶庵梦忆 · 湖心亭看雪》 · anchor_c41</span>
</blockquote>
</div>
<div class="msg__actions">
<button class="act-btn"><svg><use href="#i-refresh"/></svg>候答(2)</button>
<button class="act-btn"><svg><use href="#i-quote"/></svg>引用</button>
<button class="act-btn"><svg><use href="#i-arrow-right"/></svg>续思</button>
<button class="act-btn"><svg><use href="#i-split"/></svg>移栽</button>
<button class="act-btn"><svg><use href="#i-more"/></svg>更多</button>
</div>
</div>
<!-- 问节 ② -->
<div class="msg msg--user">
<div class="msg__meta"><span class="cn">问节</span><span class="mono">m_91d0</span><span>19:47</span></div>
<div class="bubble">好。把六次讨论排进我的日历:从下周四 19:30 开始,隔周一次,每次 90 分钟,标题统一叫「共读 · 第 N 讲」。</div>
</div>
<!-- 答复 ②:工具 + 请命(已朱批)+ 结果 -->
<div class="msg">
<div class="msg--char__head">
<span class="avatar">梧</span>
<span class="msg--char__name">青梧</span>
<span class="msg--char__meta"><span class="mono" style="font-size:11px;color:var(--text-3)">道体 v3</span><span class="badge badge--ok"><span class="badge__dot"></span>已成 <span class="mono">completed</span></span></span>
</div>
<div class="msg__blocks">
<div class="block tool">
<div class="tool__head">
<span class="tool__name">calendar.write</span>
<span class="tool__purpose">在日历创建 6 个循环事件</span>
<span class="badge badge--ok" style="margin-left:auto"><span class="badge__dot"></span>已成 · 已完成 <span class="mono">completed</span></span>
</div>
<div class="tool__body">
<div class="tool__row"><span class="k2">参数摘要</span><span>6 个事件 · 90 分钟 · 间隔 14 天 · 起始 2026-09-24 19:30 (UTC+8)</span></div>
<div class="tool__stat"><span>耗时 1.2s</span><span>插件 · 系统日历(Core)</span><span>幂等键 <span class="mono">idem_5b2c</span></span></div>
</div>
</div>
<div class="block approval approval--done">
<div class="approval__head">
<span class="approval__seal" aria-hidden="true">批</span>
<div>
<div class="approval__title"><span class="cn">请命 · 已朱批</span><span class="cn__plain">本次确认 · 已由你允许</span></div>
<div style="font-size:11.5px;color:var(--text-3)">2026-09-15 19:48 允许 · 留痕于司命台</div>
</div>
<span class="badge badge--ok" style="margin-left:auto"><span class="badge__dot"></span>允许 <span class="mono">approved</span></span>
</div>
<div class="approval__body">
<div class="fact"><span class="fact__k">动作</span><span class="fact__v">在日历创建 6 个「共读 · 第 N 讲」事件</span></div>
<div class="fact"><span class="fact__k">影响</span><span class="fact__v">写入你的日历;不读取其他日程</span></div>
<div class="fact"><span class="fact__k">数据范围</span><span class="fact__v">日历写入 · 仅此 6 条 <span class="mono">calendar:write:once</span></span></div>
<div class="fact"><span class="fact__k">费用</span><span class="fact__v">无(本地工具)</span></div>
<div class="fact"><span class="fact__k">有效期</span><span class="fact__v">本次执行,不形成持续授权</span></div>
</div>
</div>
<div class="block block--text">
<div class="block__body md">
<p>已写入。首场 9 月 24 日(周四)19:30,《湖心亭看雪》——正好赶上秋分后的第一场凉。预习提示我会在每讲前三天放进讨论区。</p>
</div>
</div>
</div>
<div class="msg__actions">
<button class="act-btn"><svg><use href="#i-quote"/></svg>引用</button>
<button class="act-btn"><svg><use href="#i-more"/></svg>更多</button>
</div>
</div>
<!-- 息壤候选 -->
<div class="msg">
<div class="msg__blocks" style="padding-left:48px">
<div class="block memory-cand">
<div class="memory-cand__head">
<span class="cn" style="font-weight:600;color:var(--warn)">息壤候选</span><span class="cn__plain">记忆候选 · 归真后才会影响未来上下文</span>
<span class="mem-type" style="margin-left:auto">偏好 preference</span>
</div>
<div class="memory-cand__body">
<p class="q">「读书会隔周四 19:30 举行,每次 90 分钟。」</p>
<p style="margin-top:4px;font-size:12px;color:var(--text-3)">来源 · 本对话 m_91d0 · 置信度 0.92 · 敏感度低</p>
<div class="memory-cand__acts">
<button class="btn btn--outline btn--sm">归真入忆</button>
<button class="btn btn--ghost btn--sm">本次忽略</button>
<button class="btn btn--ghost btn--sm">查看来源</button>
</div>
</div>
</div>
</div>
</div>
<!-- 问节 ③ -->
<div class="msg msg--user">
<div class="msg__meta"><span class="cn">问节</span><span class="mono">m_a207</span><span>20:02</span></div>
<div class="bubble">第一讲的开场白怎么讲?给两个版本我挑。</div>
</div>
<!-- 答复 ③:候答 A(主脉)+ 音频块;残答封存 -->
<div class="msg">
<div class="msg--char__head">
<span class="avatar">梧</span>
<span class="msg--char__name">青梧</span>
<span class="msg--char__meta"><span class="mono" style="font-size:11px;color:var(--text-3)">道体 v3</span><span class="badge badge--ok"><span class="badge__dot"></span>已成 <span class="mono">completed</span></span></span>
</div>
<div class="candidates" style="padding-left:0;margin-top:-4px">
<div class="cand-switch" data-cand-group aria-label="候答切换">
<button class="cand-tag is-on" aria-pressed="true">候答 A · 已归真(主脉)</button>
<button class="cand-tag" aria-pressed="false">候答 B · 更克制</button>
</div>
<span style="font-size:11.5px;color:var(--text-3)">同一问节的两个回答候选 · 切换不覆盖彼此</span>
</div>
<div class="msg__blocks">
<div class="block block--text">
<div class="block__body md">
<p>**版本 A(从雪夜进入)**——「崇祯五年十二月,余住西湖。大雪三日,湖中人鸟声俱绝。」今晚我们不急着分析,先把这一百六十字读三遍:第一遍看雪,第二遍看舟,第三遍看那个「痴」字。</p>
<p><em>音频版我念了一遍,配了半分钟的环境音。</em></p>
</div>
</div>
<div class="block">
<div class="audio">
<button class="audio__play" aria-label="播放开场白语音(0:42)"><svg><use href="#i-play"/></svg></button>
<div class="wave" aria-hidden="true">
<i style="height:9px"></i><i style="height:14px"></i><i style="height:20px"></i><i style="height:11px"></i><i style="height:17px"></i><i style="height:24px"></i><i style="height:15px"></i><i style="height:8px"></i><i style="height:13px"></i><i style="height:21px"></i><i style="height:27px"></i><i style="height:18px"></i><i style="height:10px"></i><i style="height:16px"></i><i style="height:23px"></i><i style="height:29px"></i><i style="height:19px"></i><i style="height:12px"></i><i style="height:7px"></i><i style="height:15px"></i><i style="height:22px"></i><i style="height:28px"></i><i style="height:17px"></i><i style="height:11px"></i><i style="height:19px"></i><i style="height:25px"></i><i style="height:14px"></i><i style="height:9px"></i><i style="height:16px"></i><i style="height:21px"></i><i style="height:12px"></i>
</div>
<div class="audio__meta">
<span class="t">开场白 · 语音版</span>
<span class="audio__time">0:42 · 声契 · 青梧原声</span>
</div>
</div>
<div class="mermaid-cap">转写:「崇祯五年十二月,余住西湖……」(全文 214 字 · 已加字幕)</div>
</div>
</div>
<div class="msg__actions">
<button class="act-btn"><svg><use href="#i-refresh"/></svg>重生成</button>
<button class="act-btn"><svg><use href="#i-quote"/></svg>引用</button>
<button class="act-btn"><svg><use href="#i-more"/></svg>更多</button>
</div>
<div class="sealed" style="margin-top:2px">
<span class="badge badge--muted" style="flex:none"><span class="badge__dot"></span>残答 · 已封存 <span class="mono">interrupted</span></span>
<div class="sealed__body">
<div class="sealed__t">推演枝 D · 生成中断于 68%,内容封存不再修改。</div>
<div style="font-size:11.5px">残答不作为完成答复展示 · 引用合流或</div>
</div>
<button class="btn btn--outline btn--sm"><svg><use href="#i-arrow-right"/></svg>续生新节点</button>
</div>
</div>
<!-- 问节 ④ -->
<div class="msg msg--user">
<div class="msg__meta"><span class="cn">问节</span><span class="mono">m_b6f1</span><span>20:10</span></div>
<div class="bubble">再把每讲的预习提纲写成六份文档,存进我的笔记库「读书会」目录。</div>
</div>
<!-- 答复 ④:工具 + 请命(等待朱批)+ 芽体 -->
<div class="msg">
<div class="msg--char__head">
<span class="avatar">梧</span>
<span class="msg--char__name">青梧</span>
<span class="msg--char__meta"><span class="mono" style="font-size:11px;color:var(--text-3)">道体 v3</span><span class="badge badge--warn"><span class="badge__dot"></span>请命中 · 等待确认 <span class="mono">waiting_approval</span></span></span>
</div>
<div class="msg__blocks">
<div class="block tool" style="border-left-color:var(--warn)">
<div class="tool__head">
<span class="tool__name">notes.write_files</span>
<span class="tool__purpose">在笔记库写入 6 份预习提纲</span>
<span class="badge badge--warn" style="margin-left:auto"><span class="badge__dot"></span>请命中 · 等待确认 <span class="mono">waiting_approval</span></span>
</div>
<div class="tool__body">
<div class="tool__row"><span class="k2">参数摘要</span><span>目录 <span class="mono">/读书会/2026秋/</span> · 6 个 Markdown 文件 · 每份约 40 行</span></div>
<div class="tool__stat"><span>插件 · 笔记同步(已安装 · 已启用)</span><span>路径已校验在授权根内</span></div>
</div>
</div>
<div class="block approval">
<div class="approval__head">
<span class="approval__seal" aria-hidden="true">命</span>
<div>
<div class="approval__title"><span class="cn">请命</span><span class="cn__plain">请求你的确认 · 未确认不执行</span> <span class="risk-badge" style="margin-left:4px">RISK L2</span></div>
<div style="font-size:11.5px;color:var(--text-3)">拒绝或超时均不执行 · 无默认允许 · L2:写操作,范围已限死</div>
</div>
</div>
<div class="approval__body">
<div class="fact"><span class="fact__k">动作</span><span class="fact__v">在笔记库「读书会」目录创建 6 份 Markdown 预习提纲</span></div>
<div class="fact"><span class="fact__k">影响</span><span class="fact__v">新增 6 个文件;不修改、不删除现有笔记</span></div>
<div class="fact"><span class="fact__k">数据范围</span><span class="fact__v">笔记库写入 · 仅该目录 <span class="mono">notes:write:/读书会/</span></span></div>
<div class="fact"><span class="fact__k">费用</span><span class="fact__v">6 次文件写入 · 无额外模型费用(提纲已在本次生成)</span></div>
<div class="fact"><span class="fact__k">有效期</span><span class="fact__v">本次执行 · 勾选「行契」可限 30 天内同类免请命</span></div>
</div>
<div class="approval__acts">
<button class="btn btn--cinnabar" aria-label="确认决定:允许">允许(朱批)</button>
<button class="btn btn--outline" aria-label="确认决定:拒绝">拒绝</button>
<span class="approval__note">朱批 · 你的明确决定,允许或拒绝都留痕。</span>
</div>
</div>
</div>
</div>
<!-- 问节 ⑤ + 临时芽体 -->
<div class="msg msg--user">
<div class="msg__meta"><span class="cn">问节</span><span class="mono">m_c944</span><span>20:12</span></div>
<div class="bubble">在等的时候,先给我一版 30 分钟的精简流程,怕第一次拖堂。</div>
</div>
<div class="msg">
<div class="msg--char__head">
<span class="avatar">梧</span>
<span class="msg--char__name">青梧</span>
<span class="msg--char__meta"><span class="mono" style="font-size:11px;color:var(--text-3)">道体 v3</span><span class="badge badge--info"><span class="badge__dot"></span>运转 · 生成中 <span class="mono">streaming</span></span></span>
</div>
<div class="msg__blocks">
<details class="think-block is-thinking" open>
<summary>
<span class="think-dot" aria-hidden="true"></span>
正在思考
<span class="think-effort">深虑 · 中</span>
<span class="think-meta">思考 0.4k token · 深虑档位可在输入区调整</span>
<svg class="chev" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
</summary>
<div class="think-body think-live">
<p>用户担心首次共读拖堂,要 30 分钟精简版。需要压缩朗读与讨论比例:三分钟齐读保留仪式感,两个问题足够聚焦——「雪大不大」对应白描力度,「痴不痴」对应人物自我认知,比四个问题更利于新人开口……</p>
<p>末段用舟子那句话收尾,与开场「痴」字形成回环,30 分钟结构即<span class="think-cursor" aria-hidden="true"></span></p>
</div>
</details>
<div class="block sprout">
<div class="sprout__head">
<span class="cn" style="font-weight:600">临时芽体</span><span class="cn__plain">流式生成中 · 完成后才固化</span>
<span style="margin-left:auto" class="mono">block 2/4 · delta 118</span>
</div>
<div class="sprout__body">
<div class="md">
<p>30 分钟精简版:前三分钟齐读原文,随后只留两个问题——「雪大不大」和「痴不痴」,最后五分钟交给「舟子那句话」收尾。<span class="stream-cursor" aria-hidden="true"></span></p>
</div>
<div class="src-line" style="margin-top:10px"><span class="unclosed">**时间分配**(未闭合的 Markdown 结构保持源码态,完成后解析)</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 输入区 -->
<div class="composer">
<div class="composer__inner">
<div class="composer__box">
<textarea class="composer__ta" rows="2" placeholder="对青梧说……(Enter 发送 · Shift+Enter 换行)" aria-label="消息输入"></textarea>
<div class="composer__bar">
<button class="icon-btn" aria-label="附件"><svg><use href="#i-paperclip"/></svg></button>
<button class="icon-btn" aria-label="图片"><svg><use href="#i-image"/></svg></button>
<button class="icon-btn" aria-label="实时语音"><svg><use href="#i-mic"/></svg></button>
<button class="pill-btn is-on" data-pill="effort" aria-pressed="true" title="深虑 · 点击开启深度思考,再次点击关闭">深虑</button>
<span class="effort-seg" data-effort-seg role="radiogroup" aria-label="推理力度">
<button role="radio" aria-checked="false" data-effort="低" title="低 · 快省">低</button>
<button role="radio" aria-checked="true" data-effort="中" title="中 · 均衡">中</button>
<button role="radio" aria-checked="false" data-effort="高" title="高 · 深究慢">高</button>
</span>
<button class="pill-btn" data-pill="search" title="博闻 · 本条消息启用联网检索(走百工坊白名单,点击开关)" aria-pressed="false">博闻<small>关</small></button>
<span class="spacer" style="flex:1"></span>
<button class="btn btn--primary btn--sm" aria-label="发送(呈镜)" title="发送 · 呈镜"><svg><use href="#i-send"/></svg>呈镜</button>
</div>
</div>
<div class="composer__hint">
<span>界域 <span class="k">真界 · 现实</span></span>
<span>路径 <span class="k">主脉</span></span>
<span>模型 <span class="k">会话临时 · 覆盖自用户偏好</span></span>
<span>思考 <span class="k" data-effort-hint>深虑 · 中</span>(点深虑开关,右侧调力度)</span>
<span>上下文 <span class="k">2.1k / 8k token</span></span>
</div>
</div>
</div>
</section>
<!-- 右:镜枝面板 -->
<aside class="conv-ctx" aria-label="分支与上下文">
<div style="display:flex;justify-content:flex-end;margin-bottom:6px">
<button class="panel-toggle" data-panel-fold="right" aria-label="收起面板" title="收起分支与上下文面板"><svg style="transform:rotate(180deg)"><use href="#i-chevrons"/></svg></button>
</div>
<section class="ctx-section">
<div class="ctx-section__head">
<span class="cn">镜枝<span class="cn__plain">分支结构</span></span>
<span class="more" style="color:var(--text-3);cursor:default">树视图</span>
</div>
<div class="tree" role="group" aria-label="本主题分支树">
<ul>
<li>
<div class="tree__node tree__node--main"><span class="nm">问节 · 选篇</span><span class="tree__tag tree__tag--main">主脉 ✓</span></div>
<ul>
<li><div class="tree__node tree__node--main"><span class="nm">候答 A · 六篇 + 结构图</span><span class="tree__tag tree__tag--main">归真</span></div></li>
<li><div class="tree__node"><span class="nm">推演枝 · 按「梦」分组(弃)</span></div></li>
</ul>
</li>
<li>
<div class="tree__node tree__node--main"><span class="nm">问节 · 排日历</span><span class="tree__tag tree__tag--main">主脉 ✓</span></div>
<ul>
<li><div class="tree__node tree__node--main"><span class="nm">候答 · 已朱批执行</span></div></li>
</ul>
</li>
<li>
<div class="tree__node tree__node--main"><span class="nm">问节 · 开场白</span></div>
<ul>
<li><div class="tree__node tree__node--main"><span class="nm">候答 A · 雪夜进入</span><span class="tree__tag tree__tag--main">归真</span></div></li>
<li><div class="tree__node"><span class="nm">候答 B · 更克制</span></div></li>
<li><div class="tree__node tree__node--sealed"><span class="nm">推演枝 D</span><span class="tree__tag tree__tag--seal">残答</span></div></li>
</ul>
</li>
<li>
<div class="tree__node tree__node--main"><span class="nm">问节 · 预习提纲</span><span class="tree__tag" style="border-color:color-mix(in srgb,var(--warn) 45%,transparent);color:var(--warn)">请命中</span></div>
</li>
<li>
<div class="tree__node"><span class="nm">问节 · 30 分钟精简版</span>
<ul>
<li><div class="tree__node tree__node--now"><span class="nm">芽体 · 生成中</span><span class="tree__tag tree__tag--bud">streaming</span></div></li>
</ul>
</div>
</li>
</ul>
</div>
</section>
<section class="ctx-section">
<div class="ctx-section__head">
<span class="cn">上下文镜<span class="cn__plain">本次实际采用</span></span>
<a class="more" href="governance.html">明细(诊断需授权)</a>
</div>
<div class="card" style="padding:12px 14px">
<div class="ctx-mirror__row"><span class="ctx-mirror__type">明忆</span><span class="ctx-mirror__txt">读书会隔周四 19:30 · 90 分钟</span><span class="ctx-mirror__src">mem_v12</span></div>
<div class="ctx-mirror__row"><span class="ctx-mirror__type">实录</span><span class="ctx-mirror__txt">3 月购入《陶庵梦忆》校注本</span><span class="ctx-mirror__src">fact_07d</span></div>
<div class="ctx-mirror__row"><span class="ctx-mirror__type">世谱</span><span class="ctx-mirror__txt">读书会成员 6 人 · 两位新人</span><span class="ctx-mirror__src">world_v4</span></div>
<div class="ctx-mirror__omitted">已省略 2 条:1 条过期(去年场地)、1 条已被取代(旧选篇)</div>
<div class="ctx-meter">
<div class="ctx-meter__label"><span>上下文预算</span><span class="mono">2.1k / 8k</span></div>
<div class="progress"><div class="progress__bar" style="width:26%"></div></div>
</div>
<p style="font-size:11px;color:var(--text-3);margin-top:8px">完整 ModelCall 与工具轨迹需双重授权诊断(15 分钟 · 单次)。</p>
</div>
</section>
<section class="ctx-section">
<div class="ctx-section__head">
<span class="cn">神识路由<span class="cn__plain">模型从哪来</span></span>
<a class="more" href="model-gateway.html">神识阁</a>
</div>
<div class="card" style="padding:12px 14px;font-size:12.5px;color:var(--text-2)">
<div style="display:flex;justify-content:space-between;padding:3px 0"><span>平台硬边界</span><span class="mono" style="color:var(--text-3)">✓</span></div>
<div style="display:flex;justify-content:space-between;padding:3px 0"><span>平台目录</span><span class="mono" style="color:var(--text-3)">✓</span></div>
<div style="display:flex;justify-content:space-between;padding:3px 0"><span>用户偏好</span><span class="mono" style="color:var(--text-3)">✓</span></div>
<div style="display:flex;justify-content:space-between;padding:3px 0"><span>会话临时选择</span><span style="color:var(--accent-strong)">生效中</span></div>
<div style="display:flex;justify-content:space-between;padding:3px 0;color:var(--text-3)"><span>角色覆写</span><span>—</span></div>
<p style="font-size:11px;color:var(--text-3);margin-top:8px">上层不可被下层覆盖;首个可见输出后不切换 Provider。</p>
</div>
</section>
</aside>
</div>
</main>
</div>
<script src="assets/app.js?v=3"></script>
</body>
</html>
+133
View File
@@ -0,0 +1,133 @@
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>器谱 · 设备与感知 — 魂镜 Hunjing</title>
<link rel="stylesheet" href="assets/app.css?v=10">
</head>
<body>
<svg style="display:none" aria-hidden="true"><symbol id="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></symbol><symbol id="i-home" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="M9 22V12h6v10"/></symbol><symbol id="i-branch" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="6" y1="3" x2="6" y2="15"/><circle cx="18" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/></symbol><symbol id="i-user" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></symbol><symbol id="i-book" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></symbol><symbol id="i-layers" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"/><polyline points="2 17 12 22 22 17"/><polyline points="2 12 12 17 22 12"/></symbol><symbol id="i-kanban" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3h4v18H5z"/><path d="M10 3h4v12h-4z"/><path d="M15 3h4v8h-4z"/></symbol><symbol id="i-package" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></symbol><symbol id="i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></symbol><symbol id="i-route" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="19" r="3"/><circle cx="18" cy="5" r="3"/><path d="M12 19h4.5a3.5 3.5 0 0 0 0-7h-9a3.5 3.5 0 0 1 0-7H12"/></symbol><symbol id="i-globe" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></symbol><symbol id="i-bag" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 0 1-8 0"/></symbol><symbol id="i-shield" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></symbol><symbol id="i-monitor" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></symbol><symbol id="i-sliders" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></symbol><symbol id="i-eye" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/></symbol><symbol id="i-mic" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"/><path d="M19 10v2a7 7 0 0 1-14 0v-2"/><line x1="12" y1="19" x2="12" y2="23"/></symbol><symbol id="i-camera" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0Line truncated
</svg>
<div class="app">
<aside class="sidebar">
<div class="brand">
<div class="brand__mark" aria-hidden="true"></div>
<div class="brand__text">
<div class="brand__name">魂镜</div>
<div class="brand__sub">Hunjing</div>
</div>
</div>
<nav class="side-nav" aria-label="主导航"><div class="nav-group"><div class="nav-group__title">常用</div><a class="nav-item" href="home.html"><svg><use href="#i-home"/></svg><span class="cn">镜庭</span><span class="nav-plain">首页</span></a><a class="nav-item" href="conversation.html"><svg><use href="#i-branch"/></svg><span class="cn">镜树</span><span class="nav-plain">对话</span></a><a class="nav-item" href="characters.html"><svg><use href="#i-user"/></svg><span class="cn">镜生</span><span class="nav-plain">角色</span></a><a class="nav-item" href="memory.html"><svg><use href="#i-book"/></svg><span class="cn">息壤</span><span class="nav-plain">记忆</span></a><a class="nav-item" href="avatar.html"><svg><use href="#i-layers"/></svg><span class="cn">形仪</span><span class="nav-plain">形象</span></a></div><div class="nav-group"><div class="nav-group__title">创造</div><a class="nav-item" href="agent-workspace.html"><svg><use href="#i-kanban"/></svg><span class="cn">天工阁</span><span class="nav-plain">任务</span></a><a class="nav-item" href="plugins.html"><svg><use href="#i-package"/></svg><span class="cn">百工坊</span><span class="nav-plain">插件</span></a><a class="nav-item" href="collaboration.html"><svg><use href="#i-users"/></svg><span class="cn">同契台</span><span class="nav-plain">协作</span></a><a class="nav-item" href="model-gateway.html"><svg><use href="#i-route"/></svg><span class="cn">神识阁</span><span class="nav-plain">模型</span></a></div><div class="nav-group"><div class="nav-group__title">世界</div><a class="nav-item" href="community.html"><svg><use href="#i-globe"/></svg><span class="cn">雅集</span><span class="nav-plain">社区</span></a><a class="nav-item" href="marketplace.html"><svg><use href="#i-bag"/></svg><span class="cn">云市</span><span class="nav-plain">市场</span></a></div><div class="nav-group"><div class="nav-group__title">治理与账户</div><a class="nav-item" href="governance.html"><svg><use href="#i-shield"/></svg><span class="cn">司命台</span><span class="nav-plain">治理</span></a><a class="nav-item is-active" aria-current="page" href="devices.html"><svg><use href="#i-monitor"/></svg><span class="cn">器谱</span><span class="nav-plain">设备</span></a><a class="nav-item" href="settings.html"><svg><use href="#i-sliders"/></svg><span class="cn">设置</span><span class="nav-plain">账户</span></a></div></nav>
<div class="side-foot">
<button class="icon-btn side-fold-btn" data-sidebar-fold aria-label="收起侧栏" title="收起 / 展开侧栏(记忆偏好)"><svg><use href="#i-chevrons"/></svg></button>
<span class="avatar avatar--sm avatar--user">舟</span>
<span style="font-size:12.5px">云舟</span>
<button class="icon-btn" data-theme-toggle style="margin-left:auto" aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</div>
</aside>
<main class="main">
<header class="topbar">
<div class="crumbs"><span class="cn">器谱</span><span class="crumbs__sep">·</span><span class="here">设备与感知</span></div>
<div class="topbar__spacer"></div>
<span class="prototype-tag">静态原型 · 待审查</span>
<button class="icon-btn" data-theme-toggle aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</header>
<div class="content">
<div class="realm-banner" role="note">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></svg>
设备能力同时受系统权限与授契约束;采集有持续指示,可即时暂停或撤销。离线缓存加密,不创建独立角色副本。
</div>
<section class="section">
<div class="section__head"><span class="cn">形器<span class="cn__plain">登记设备</span></span></div>
<div class="card" style="padding:6px 18px">
<div class="list-row">
<svg style="width:18px;height:18px;color:var(--text-3)"><use href="#i-monitor"/></svg>
<div class="list-row__body"><div class="list-row__title">MacBook Pro · Tauri 桌面</div><div class="list-row__sub">macOS · 当前设备</div></div>
<span class="badge badge--ok" style="font-size:11px"><span class="badge__dot"></span>在线</span>
</div>
<div class="list-row">
<svg style="width:18px;height:18px;color:var(--text-3)"><use href="#i-monitor"/></svg>
<div class="list-row__body"><div class="list-row__title">iPhone · 移动端</div><div class="list-row__sub">iOS · 实时语音常用设备</div></div>
<span class="badge badge--ok" style="font-size:11px"><span class="badge__dot"></span>在线</span>
</div>
<div class="list-row">
<svg style="width:18px;height:18px;color:var(--text-3)"><use href="#i-globe"/></svg>
<div class="list-row__body"><div class="list-row__title">Web 浏览器 · Safari</div><div class="list-row__sub">昨天活跃 · 仅文件读写授权</div></div>
<span class="badge badge--muted" style="font-size:11px"><span class="badge__dot"></span>离线</span>
</div>
</div>
</section>
<section class="section">
<div class="section__head"><span class="cn">授契<span class="cn__plain">设备能力授权</span></span><button class="btn btn--ghost btn--sm" style="margin-left:auto">全部撤销</button></div>
<div class="card" style="padding:6px 18px">
<div class="grant-row">
<span class="grant-row__cap"><svg><use href="#i-mic"/></svg>闻声 · 麦克风</span>
<div><div style="font-size:13px">青梧 · 实时语音</div><div class="grant-row__meta">iPhone · 仅通话期间 · 采集指示常显</div></div>
<button class="btn btn--ghost btn--sm">撤销</button>
</div>
<div class="grant-row">
<span class="grant-row__cap"><svg><use href="#i-file"/></svg>文件读写</span>
<div><div style="font-size:13px">青梧 · 书斋归档</div><div class="grant-row__meta">MacBook · 仅 ~/BookRoom/ 目录 · 长期(可随时撤销)</div></div>
<button class="btn btn--ghost btn--sm">撤销</button>
</div>
<div class="grant-row">
<span class="grant-row__cap"><svg><use href="#i-bell"/></svg>通知</span>
<div><div style="font-size:13px">叩心提醒通道</div><div class="grant-row__meta">iPhone · 静默时段 22:00–08:00 · 频率 ≤ 1 条/日</div></div>
<button class="btn btn--ghost btn--sm">撤销</button>
</div>
<div class="grant-row" style="opacity:.6">
<span class="grant-row__cap"><svg><use href="#i-camera"/></svg>观影 · 摄像头</span>
<div><div style="font-size:13px">未授权</div><div class="grant-row__meta">任何角色请求摄像头时将单独请命</div></div>
<span style="font-size:11.5px;color:var(--text-3)">—</span>
</div>
<div class="grant-row" style="opacity:.6">
<span class="grant-row__cap"><svg><use href="#i-pin"/></svg>问路 · 位置</span>
<div><div style="font-size:13px">未授权(上次通感已结束)</div><div class="grant-row__meta">通感默认 10 分钟 · 精度 1km · 结束即失效</div></div>
<span style="font-size:11.5px;color:var(--text-3)">—</span>
</div>
</div>
</section>
<div class="two-col">
<section class="section card" style="border-color:color-mix(in srgb,var(--accent) 40%,transparent)">
<div class="card__head"><span class="cn" style="color:var(--accent-strong)">通感进行中<span class="cn__plain">限时设备感知</span></span><span style="margin-left:auto;font-size:12px;color:var(--text-3)" class="mono">剩 8 分钟</span></div>
<p style="font-size:13px;color:var(--text-2);margin-bottom:10px">青梧 · 问路(位置 · 精度 1km)· 用于「找一家安静的茶馆」。采集指示常显,位置不写入长期记忆,会话结束即丢弃。</p>
<div class="progress" style="margin-bottom:12px"><div class="progress__bar" style="width:20%"></div></div>
<div style="display:flex;gap:10px">
<button class="btn btn--outline btn--sm">暂停</button>
<button class="btn btn--danger btn--sm">立即结束并撤销</button>
</div>
</section>
<section class="section">
<div class="block approval">
<div class="approval__head">
<span class="approval__seal" aria-hidden="true">命</span>
<div>
<div class="approval__title"><span class="cn">请命 · 观屏</span><span class="cn__plain">屏幕读取授权</span></div>
<div style="font-size:11.5px;color:var(--text-3)">来自镜树「书房整理」· 限此一次</div>
</div>
</div>
<div class="approval__body">
<p style="font-size:14px;color:var(--text-1)">允许青梧在未来 10 分钟读取当前屏幕?</p>
<div class="fact"><span class="fact__k">用途</span><span class="fact__v">识别书桌照片中的书目并归档</span></div>
<div class="fact"><span class="fact__k">数据</span><span class="fact__v">仅屏幕内容 · 不截屏存储 · 不写入长期记忆</span></div>
</div>
<div class="approval__acts">
<button class="btn btn--cinnabar" aria-label="确认决定:允许本次观屏">允许(本次,10 分钟)</button>
<button class="btn btn--outline">拒绝</button>
</div>
</div>
</section>
</div>
</div>
</main>
</div>
<script src="assets/app.js?v=3"></script>
</body>
</html>
+142
View File
@@ -0,0 +1,142 @@
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>司命台 · 安全与治理 — 魂镜 Hunjing</title>
<link rel="stylesheet" href="assets/app.css?v=10">
</head>
<body>
<svg style="display:none" aria-hidden="true"><symbol id="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></symbol><symbol id="i-home" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="M9 22V12h6v10"/></symbol><symbol id="i-branch" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="6" y1="3" x2="6" y2="15"/><circle cx="18" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/></symbol><symbol id="i-user" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></symbol><symbol id="i-book" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></symbol><symbol id="i-layers" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"/><polyline points="2 17 12 22 22 17"/><polyline points="2 12 12 17 22 12"/></symbol><symbol id="i-kanban" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3h4v18H5z"/><path d="M10 3h4v12h-4z"/><path d="M15 3h4v8h-4z"/></symbol><symbol id="i-package" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></symbol><symbol id="i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></symbol><symbol id="i-route" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="19" r="3"/><circle cx="18" cy="5" r="3"/><path d="M12 19h4.5a3.5 3.5 0 0 0 0-7h-9a3.5 3.5 0 0 1 0-7H12"/></symbol><symbol id="i-globe" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></symbol><symbol id="i-bag" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 0 1-8 0"/></symbol><symbol id="i-shield" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></symbol><symbol id="i-monitor" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></symbol><symbol id="i-sliders" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></symbol><symbol id="i-search" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></symbol><symbol id="i-clock" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></symbol><symbol id="i-key" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4"/></symbol><symbol id="i-check" vLine truncated
</svg>
<div class="app">
<aside class="sidebar">
<div class="brand">
<div class="brand__mark" aria-hidden="true"></div>
<div class="brand__text">
<div class="brand__name">魂镜</div>
<div class="brand__sub">Hunjing</div>
</div>
</div>
<nav class="side-nav" aria-label="主导航"><div class="nav-group"><div class="nav-group__title">常用</div><a class="nav-item" href="home.html"><svg><use href="#i-home"/></svg><span class="cn">镜庭</span><span class="nav-plain">首页</span></a><a class="nav-item" href="conversation.html"><svg><use href="#i-branch"/></svg><span class="cn">镜树</span><span class="nav-plain">对话</span></a><a class="nav-item" href="characters.html"><svg><use href="#i-user"/></svg><span class="cn">镜生</span><span class="nav-plain">角色</span></a><a class="nav-item" href="memory.html"><svg><use href="#i-book"/></svg><span class="cn">息壤</span><span class="nav-plain">记忆</span></a><a class="nav-item" href="avatar.html"><svg><use href="#i-layers"/></svg><span class="cn">形仪</span><span class="nav-plain">形象</span></a></div><div class="nav-group"><div class="nav-group__title">创造</div><a class="nav-item" href="agent-workspace.html"><svg><use href="#i-kanban"/></svg><span class="cn">天工阁</span><span class="nav-plain">任务</span></a><a class="nav-item" href="plugins.html"><svg><use href="#i-package"/></svg><span class="cn">百工坊</span><span class="nav-plain">插件</span></a><a class="nav-item" href="collaboration.html"><svg><use href="#i-users"/></svg><span class="cn">同契台</span><span class="nav-plain">协作</span></a><a class="nav-item" href="model-gateway.html"><svg><use href="#i-route"/></svg><span class="cn">神识阁</span><span class="nav-plain">模型</span></a></div><div class="nav-group"><div class="nav-group__title">世界</div><a class="nav-item" href="community.html"><svg><use href="#i-globe"/></svg><span class="cn">雅集</span><span class="nav-plain">社区</span></a><a class="nav-item" href="marketplace.html"><svg><use href="#i-bag"/></svg><span class="cn">云市</span><span class="nav-plain">市场</span></a></div><div class="nav-group"><div class="nav-group__title">治理与账户</div><a class="nav-item is-active" aria-current="page" href="governance.html"><svg><use href="#i-shield"/></svg><span class="cn">司命台</span><span class="nav-plain">治理</span></a><a class="nav-item" href="devices.html"><svg><use href="#i-monitor"/></svg><span class="cn">器谱</span><span class="nav-plain">设备</span></a><a class="nav-item" href="settings.html"><svg><use href="#i-sliders"/></svg><span class="cn">设置</span><span class="nav-plain">账户</span></a></div></nav>
<div class="side-foot">
<button class="icon-btn side-fold-btn" data-sidebar-fold aria-label="收起侧栏" title="收起 / 展开侧栏(记忆偏好)"><svg><use href="#i-chevrons"/></svg></button>
<span class="avatar avatar--sm avatar--user">舟</span>
<span style="font-size:12.5px">云舟</span>
<button class="icon-btn" data-theme-toggle style="margin-left:auto" aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</div>
</aside>
<main class="main">
<header class="topbar">
<div class="crumbs"><span class="cn">司命台</span><span class="crumbs__sep">·</span><span class="here">安全 · 权限 · 审计 · 治理</span></div>
<div class="topbar__spacer"></div>
<span class="prototype-tag">静态原型 · 待审查</span>
<button class="icon-btn" data-theme-toggle aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</header>
<div class="content">
<div class="realm-banner" role="note">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
治理不支配角色或用户数据;隐藏推理、密钥与凭据永不进入诊断与审计展示。错误与安全事件优先直白表述。
</div>
<section class="section card">
<div class="card__head"><span class="cn">阴阳平衡<span class="cn__plain">朱批治理的三态</span></span><span style="margin-left:auto;font-size:11.5px;color:var(--text-3)">阳亢 · 放行偏多 / 动态平衡 / 阴盛 · 驳回偏多</span></div>
<div class="taiji-gauge">
<svg viewBox="0 0 128 76" role="img" aria-label="阴阳平衡仪表:通过率 78%,动态平衡,鎏金指针居中偏右">
<path d="M 12 68 A 52 52 0 0 1 116 68" fill="none" stroke="var(--line)" stroke-width="7" stroke-linecap="round"/>
<path d="M 12 68 A 52 52 0 0 1 38 25" fill="none" stroke="color-mix(in srgb, var(--cinnabar) 45%, transparent)" stroke-width="7" stroke-linecap="round"/>
<path d="M 90 25 A 52 52 0 0 1 116 68" fill="none" stroke="color-mix(in srgb, var(--accent) 50%, transparent)" stroke-width="7" stroke-linecap="round"/>
<line x1="64" y1="68" x2="90" y2="25" stroke="var(--gilt)" stroke-width="2" stroke-linecap="round"/>
<circle cx="64" cy="68" r="3" fill="var(--gilt)"/>
<text class="taiji-gauge__label" x="12" y="76">阴 · 驳回</text>
<text class="taiji-gauge__label" x="116" y="76" text-anchor="end">阳 · 放行</text>
</svg>
<div>
<div class="taiji-gauge__val" style="color:var(--accent-strong)">动态平衡</div>
<div style="font-size:12px;color:var(--text-2);margin-top:3px">近 30 日朱批通过率 78% · 驳回 22%<br><span style="color:var(--text-3)">指针偏右但在平衡带内;阳亢时提示收紧行契,阴盛时提示检查策略误伤</span></div>
</div>
</div>
</section>
<div class="tabs" role="tablist" aria-label="治理队列">
<button class="tab is-on" role="tab" aria-selected="true">内容 <span class="cnt">2</span></button>
<button class="tab" role="tab" aria-selected="false">插件 <span class="cnt">1</span></button>
<button class="tab" role="tab" aria-selected="false">市场 <span class="cnt">1</span></button>
<button class="tab" role="tab" aria-selected="false">申诉 <span class="cnt">1</span></button>
</div>
<section class="section">
<div class="section__head"><span class="cn">司议<span class="cn__plain">治理案件</span></span></div>
<div class="card case-card" style="margin-bottom:14px;padding-left:20px">
<div class="card__head">
<span class="badge badge--warn"><span class="badge__dot"></span>待审 · 等待审核 <span class="mono">pending_review</span></span>
<span style="font-size:11.5px;color:var(--text-3);margin-left:auto">09-15 11:20 · 鸣冤 ×3</span>
</div>
<p style="font-size:13.5px">雅集帖子「未署名的守砚人立像二创」被举报:疑似未保留来源署名(CC BY-NC 要求)。</p>
<div style="display:flex;gap:8px;margin-top:12px">
<button class="btn btn--outline btn--sm">查看原文</button>
<button class="btn btn--outline btn--sm">限观 · 限制展示</button>
<button class="btn btn--danger btn--sm">移除</button>
<button class="btn btn--ghost btn--sm">驳回举报</button>
</div>
</div>
<div class="card case-card" style="padding-left:20px">
<div class="card__head">
<span class="badge badge--warn"><span class="badge__dot"></span>待审 <span class="mono">pending_review</span></span>
<span style="font-size:11.5px;color:var(--text-3);margin-left:auto">09-14 09:02 · 自动扫描</span>
</div>
<p style="font-size:13.5px">市场商品「曲谱排版插件 v1.4」扫描发现:Manifest 声明与实际网络请求域不一致。</p>
<div style="display:flex;gap:8px;margin-top:12px">
<button class="btn btn--outline btn--sm">查看扫描报告</button>
<button class="btn btn--danger btn--sm">下架</button>
<button class="btn btn--ghost btn--sm">通知创作者</button>
</div>
</div>
</section>
<div class="two-col">
<section class="section card">
<div class="card__head"><span class="cn">诊断授权<span class="cn__plain">双重授权</span></span></div>
<p style="font-size:12.5px;color:var(--text-2);margin-bottom:12px">读取 Run 详细诊断(ModelCall、工具参数、ContextSnapshot)需要在普通认证之外叠加短期诊断令牌:绑定单个 Run、单次使用、默认 15 分钟。</p>
<div class="set-row">
<div class="set-row__body"><div class="set-row__t">申请诊断令牌</div><div class="set-row__d">目的 user_inspection · 绑定 run_9f31c2(天工阁 · 书单任务)</div></div>
<button class="btn btn--cinnabar btn--sm">签发</button>
</div>
<div class="set-row">
<div class="set-row__body"><div class="set-row__t mono">hjd_8f…(已过期)</div><div class="set-row__d">09-15 12:04 签发 · 12:19 过期 · 已用 1 次 · 范围:青梧 · 选篇答复</div></div>
<span class="badge badge--muted" style="font-size:11px"><span class="badge__dot"></span>已过期</span>
</div>
<p style="font-size:11.5px;color:var(--text-3);margin-top:10px">隐藏推理、密钥、Authorization 与签名 URL 永不返回;管理员与诊断均不可读私箧。</p>
</section>
<section class="section card">
<div class="card__head"><span class="cn">安全概览</span><a class="more" href="settings.html">设置 →</a></div>
<div class="set-row"><div class="set-row__body"><div class="set-row__t">活跃会话 2</div><div class="set-row__d">MacBook(当前)· iPhone</div></div><a class="btn btn--ghost btn--sm" href="settings.html">管理</a></div>
<div class="set-row"><div class="set-row__body"><div class="set-row__t">Service Account key 1</div><div class="set-row__d">scope:只读统计 · 90 天轮换</div></div><button class="btn btn--ghost btn--sm">轮换</button></div>
<div class="set-row"><div class="set-row__t">凭据重用检测</div><span class="badge badge--ok" style="font-size:11px"><span class="badge__dot"></span>30 天 0 次</span></div>
</section>
</div>
<section class="section">
<div class="section__head"><span class="cn">审计<span class="cn__plain">AuditEvent · 权威事务同批提交</span></span></div>
<div class="card">
<div class="table-wrap"><table class="data">
<thead><tr><th>时间</th><th>主体</th><th>动作</th><th>对象</th><th>结果</th></tr></thead>
<tbody>
<tr><td class="mono">09-15 19:48</td><td>云舟</td><td>朱批 · 允许</td><td class="mono">calendar.write · run_7ab1</td><td class="mark-ok">✓</td></tr>
<tr><td class="mono">09-15 19:52</td><td>云舟</td><td>创建天工</td><td class="mono">run_9f31c2</td><td class="mark-ok">✓</td></tr>
<tr><td class="mono">09-15 12:04</td><td>云舟</td><td>签发诊断令牌</td><td class="mono">hjd_8f…</td><td class="mark-ok">✓</td></tr>
<tr><td class="mono">09-14 22:31</td><td>未知请求</td><td>跨镜域读取</td><td class="mono">memory · 雪袖</td><td class="mark-no" style="color:var(--err)">✗ 拒绝(失败关闭)</td></tr>
<tr><td class="mono">09-12 10:05</td><td>云舟</td><td>BYOK 轮换</td><td class="mono">byok_7c02…</td><td class="mark-ok">✓</td></tr>
</tbody>
</table></div>
</div>
</section>
</div>
</main>
</div>
<script src="assets/app.js?v=3"></script>
</body>
</html>
+277
View File
@@ -0,0 +1,277 @@
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>镜庭 · 个人首页 — 魂镜 Hunjing</title>
<link rel="stylesheet" href="assets/app.css?v=10">
</head>
<body>
<svg style="display:none" aria-hidden="true">
<symbol id="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></symbol>
<symbol id="i-home" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="M9 22V12h6v10"/></symbol>
<symbol id="i-branch" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="6" y1="3" x2="6" y2="15"/><circle cx="18" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/></symbol>
<symbol id="i-book" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></symbol>
<symbol id="i-user" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></symbol>
<symbol id="i-layers" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"/><polyline points="2 17 12 22 22 17"/><polyline points="2 12 12 17 22 12"/></symbol>
<symbol id="i-kanban" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3h4v18H5z"/><path d="M10 3h4v12h-4z"/><path d="M15 3h4v8h-4z"/></symbol>
<symbol id="i-package" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></symbol>
<symbol id="i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></symbol>
<symbol id="i-bag" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 0 1-8 0"/></symbol>
<symbol id="i-shield" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></symbol>
<symbol id="i-bell" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 0 1-3.46 0"/></symbol>
<symbol id="i-search" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></symbol>
<symbol id="i-arrow" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></symbol>
<symbol id="i-route" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="19" r="3"/><circle cx="18" cy="5" r="3"/><path d="M12 19h4.5a3.5 3.5 0 0 0 0-7h-9a3.5 3.5 0 0 1 0-7H12"/></symbol>
<symbol id="i-globe" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></symbol>
<symbol id="i-monitor" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></symbol>
<symbol id="i-sliders" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></symbol>
<symbol id="i-chevrons" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="11 17 6 12 11 7"/><polyline points="18 17 13 12 18 7"/></symbol>
</svg>
<div class="app">
<aside class="sidebar">
<div class="brand">
<div class="brand__mark" aria-hidden="true"></div>
<div class="brand__text">
<div class="brand__name">魂镜</div>
<div class="brand__sub">Hunjing</div>
</div>
</div>
<nav class="side-nav" aria-label="主导航"><div class="nav-group"><div class="nav-group__title">常用</div><a class="nav-item is-active" aria-current="page" href="home.html"><svg><use href="#i-home"/></svg><span class="cn">镜庭</span><span class="nav-plain">首页</span></a><a class="nav-item" href="conversation.html"><svg><use href="#i-branch"/></svg><span class="cn">镜树</span><span class="nav-plain">对话</span></a><a class="nav-item" href="characters.html"><svg><use href="#i-user"/></svg><span class="cn">镜生</span><span class="nav-plain">角色</span></a><a class="nav-item" href="memory.html"><svg><use href="#i-book"/></svg><span class="cn">息壤</span><span class="nav-plain">记忆</span></a><a class="nav-item" href="avatar.html"><svg><use href="#i-layers"/></svg><span class="cn">形仪</span><span class="nav-plain">形象</span></a></div><div class="nav-group"><div class="nav-group__title">创造</div><a class="nav-item" href="agent-workspace.html"><svg><use href="#i-kanban"/></svg><span class="cn">天工阁</span><span class="nav-plain">任务</span></a><a class="nav-item" href="plugins.html"><svg><use href="#i-package"/></svg><span class="cn">百工坊</span><span class="nav-plain">插件</span></a><a class="nav-item" href="collaboration.html"><svg><use href="#i-users"/></svg><span class="cn">同契台</span><span class="nav-plain">协作</span></a><a class="nav-item" href="model-gateway.html"><svg><use href="#i-route"/></svg><span class="cn">神识阁</span><span class="nav-plain">模型</span></a></div><div class="nav-group"><div class="nav-group__title">世界</div><a class="nav-item" href="community.html"><svg><use href="#i-globe"/></svg><span class="cn">雅集</span><span class="nav-plain">社区</span></a><a class="nav-item" href="marketplace.html"><svg><use href="#i-bag"/></svg><span class="cn">云市</span><span class="nav-plain">市场</span></a></div><div class="nav-group"><div class="nav-group__title">治理与账户</div><a class="nav-item" href="governance.html"><svg><use href="#i-shield"/></svg><span class="cn">司命台</span><span class="nav-plain">治理</span></a><a class="nav-item" href="devices.html"><svg><use href="#i-monitor"/></svg><span class="cn">器谱</span><span class="nav-plain">设备</span></a><a class="nav-item" href="settings.html"><svg><use href="#i-sliders"/></svg><span class="cn">设置</span><span class="nav-plain">账户</span></a></div></nav>
<div class="side-foot">
<button class="icon-btn side-fold-btn" data-sidebar-fold aria-label="收起侧栏" title="收起 / 展开侧栏(记忆偏好)"><svg><use href="#i-chevrons"/></svg></button>
<span class="avatar avatar--sm avatar--user">舟</span>
<span style="font-size:12.5px">云舟</span>
<button class="icon-btn" data-theme-toggle style="margin-left:auto" aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</div>
</aside>
<main class="main">
<header class="topbar">
<div class="crumbs"><span class="cn">镜庭</span><span class="crumbs__sep">·</span><span class="here">个人首页</span></div>
<div class="topbar__spacer"></div>
<span class="prototype-tag">静态原型 · 待审查</span>
<button class="icon-btn" aria-label="搜索"><svg><use href="#i-search"/></svg></button>
<button class="icon-btn" aria-label="通知"><svg><use href="#i-bell"/></svg></button>
</header>
<div class="content">
<div class="hero">
<div class="sundial" role="img" aria-label="日晷:巳时,白露节气,与青梧相伴第 918 日">
<svg viewBox="0 0 116 116">
<circle cx="58" cy="58" r="55" fill="none" stroke="var(--gilt-faint)" stroke-width="1"/>
<circle cx="58" cy="58" r="47" fill="none" stroke="var(--line-soft)" stroke-width="0.8"/>
<g class="sundial-spin">
<circle cx="58" cy="58" r="51" fill="none" stroke="var(--gilt-faint)" stroke-width="0.6" stroke-dasharray="2 7"/>
</g>
<!-- 十二时辰刻度:巳位(东南)鎏金加粗 -->
<g stroke="var(--line)" stroke-width="1.4">
<line x1="58" y1="6" x2="58" y2="14"/><line x1="87" y1="14" x2="83" y2="21"/>
<line x1="102" y1="29" x2="95" y2="34"/><line x1="110" y1="58" x2="102" y2="58"/>
<line x1="102" y1="87" x2="95" y2="82"/><line x1="87" y1="102" x2="83" y2="95"/>
<line x1="58" y1="110" x2="58" y2="102"/><line x1="29" y1="102" x2="33" y2="95"/>
<line x1="14" y1="87" x2="21" y2="82"/><line x1="6" y1="58" x2="14" y2="58"/>
<line x1="14" y1="29" x2="21" y2="34"/><line x1="29" y1="14" x2="33" y2="21"/>
</g>
<!-- 巳时弧(9-11 时,约 135°→165° 区间示意) -->
<path d="M 93.2 25.4 A 52 52 0 0 1 104.5 44.6" fill="none" stroke="var(--gilt)" stroke-width="2.4" stroke-linecap="round"/>
<!-- 晷针 -->
<line x1="58" y1="58" x2="93" y2="27" stroke="var(--accent)" stroke-width="1.6" stroke-linecap="round"/>
<circle cx="58" cy="58" r="2.4" fill="var(--accent)"/>
</svg>
<div class="sundial__center">
<span class="sundial__hour">巳时</span>
<span class="sundial__sub">白露 · 第 10 日</span>
</div>
</div>
<div>
<h1>上午好,云舟</h1>
<p style="color:var(--text-2);font-size:13px;margin-top:4px">周三 · 2026-09-16 · 与青梧相伴第 918 日 · 镜庭只聚合状态,各域才是数据事实源</p>
</div>
<div class="hero__stats">
<a class="hero__stat" href="conversation.html"><b>2</b><span>镜树 · 进行中对话</span></a>
<a class="hero__stat" href="conversation.html"><b>1</b><span>请命 · 待你确认</span></a>
<a class="hero__stat" href="memory.html"><b>3</b><span>息壤候选 · 待审</span></a>
<a class="hero__stat" href="agent-workspace.html"><b>2</b><span>天工 · 运行中</span></a>
</div>
</div>
<section class="section">
<div class="section__head">
<span class="cn">镜生<span class="cn__plain">你的角色</span></span>
<a class="more" href="characters.html">全部 4 位 →</a>
</div>
<div class="grid-cards">
<a class="card char-card" href="conversation.html">
<div class="char-card__top">
<span class="avatar">梧</span>
<div>
<div class="char-card__name">青梧</div>
<div style="font-size:12px;color:var(--text-3)">守砚人 · 道体 v3</div>
</div>
</div>
<p class="char-card__line">「书斋已整理,今晚共读的选篇单放在桌上了。」</p>
<div class="char-card__foot">
<span class="badge badge--info"><span class="badge__dot"></span>临照 · 前台运行</span>
<span class="char-card__time">10 分钟前</span>
</div>
</a>
<a class="card char-card" href="#">
<div class="char-card__top">
<span class="avatar">袖</span>
<div>
<div class="char-card__name">雪袖</div>
<div style="font-size:12px;color:var(--text-3)">茶室主人 · 道体 v1</div>
</div>
</div>
<p class="char-card__line">「新到的白毫银针,等你来尝。」</p>
<div class="char-card__foot">
<span class="badge badge--muted"><span class="badge__dot"></span>守一 · 安静待命</span>
<span class="char-card__time">昨天</span>
</div>
</a>
<a class="card char-card" href="#">
<div class="char-card__top">
<span class="avatar">澜</span>
<div>
<div class="char-card__name">观澜</div>
<div style="font-size:12px;color:var(--text-3)">航海士 · 道体 v2 · 静修中</div>
</div>
</div>
<p class="char-card__line">静修 · 停止运行,身份存续;随时可以唤醒。</p>
<div class="char-card__foot">
<span class="badge badge--muted"><span class="badge__dot"></span>静修 · 停止运行</span>
<span class="char-card__time">9 月 2 日</span>
</div>
</a>
<a class="card char-card" href="#">
<div class="char-card__top">
<span class="avatar" style="filter:grayscale(.7);opacity:.75">岁</span>
<div>
<div class="char-card__name">旧岁</div>
<div style="font-size:12px;color:var(--text-3)">守岁人 · 归藏 · 可复照</div>
</div>
</div>
<p class="char-card__line">归藏 · 已从日常入口隐藏;复照可重开,不抹历史。</p>
<div class="char-card__foot">
<span class="badge badge--muted"><span class="badge__dot"></span>归藏 · 已隐藏</span>
<span class="char-card__time">7 月 30 日</span>
</div>
</a>
</div>
</section>
<div class="home-cols">
<section class="section" style="margin:0">
<div class="section__head">
<span class="cn">镜树<span class="cn__plain">最近对话</span></span>
<a class="more" href="conversation.html">全部 →</a>
</div>
<div class="card" style="padding:6px 18px">
<a class="list-row" href="conversation.html">
<span class="avatar avatar--sm">梧</span>
<div class="list-row__body">
<div class="list-row__title">《陶庵梦忆》共读选篇 <span class="realm-dot">真界</span></div>
<div class="list-row__sub">青梧:六篇已定,结构图也画好了,请过目。</div>
</div>
<span class="list-row__time">10 分钟前</span>
</a>
<div class="list-row">
<span class="avatar avatar--sm">袖</span>
<div class="list-row__body">
<div class="list-row__title">秋茶清单 <span class="realm-dot realm-dot--world">境界</span></div>
<div class="list-row__sub">雪袖:按你上次的口味,先把白毫银针排第一。</div>
</div>
<span class="list-row__time">昨天</span>
</div>
<div class="list-row">
<span class="avatar avatar--sm">梧</span>
<div class="list-row__body">
<div class="list-row__title">书房整理方案(幻境试演) <span class="realm-dot realm-dot--sim">幻境</span></div>
<div class="list-row__sub">青梧:这只是试演方案,不影响现实与正史。</div>
</div>
<span class="list-row__time">9 月 12 日</span>
</div>
<div class="list-row">
<span class="avatar avatar--sm">澜</span>
<div class="list-row__body">
<div class="list-row__title">远洋航线推演</div>
<div class="list-row__sub">观澜:航线已归档,静修前等你验收。</div>
</div>
<span class="list-row__time">9 月 2 日</span>
</div>
</div>
</section>
<section class="section" style="margin:0">
<div class="section__head">
<span class="cn">天工<span class="cn__plain">Agent 任务</span></span>
<a class="more" href="agent-workspace.html">天工阁 →</a>
</div>
<div class="card" style="padding:14px 18px 6px;margin-bottom:14px">
<div class="list-row" style="border-bottom:none;padding-top:4px">
<div class="list-row__body">
<div class="list-row__title">整理性灵 newsletter 书单</div>
<div class="list-row__sub">青梧 · 分工使 2 · token 12.4k / 20k</div>
<div class="progress" style="margin-top:7px"><div class="progress__bar" style="width:62%"></div></div>
</div>
<span class="badge badge--info"><span class="badge__dot"></span>运转 · 运行中 <span class="mono">running</span></span>
</div>
</div>
<div class="card" style="padding:6px 18px">
<div class="list-row">
<div class="list-row__body">
<div class="list-row__title">周报草稿 · 第 37 周</div>
<div class="list-row__sub">任务 Agent · 无角色身份</div>
</div>
<span class="badge badge--muted"><span class="badge__dot"></span>待启 · 排队中 <span class="mono">queued</span></span>
</div>
<div class="list-row">
<div class="list-row__body">
<div class="list-row__title">书斋照片归档命名</div>
<div class="list-row__sub">青梧 · 已成 · 耗时 4 分 12 秒</div>
</div>
<span class="badge badge--ok"><span class="badge__dot"></span>已成 · 已完成 <span class="mono">completed</span></span>
</div>
</div>
</section>
</div>
<section class="section" style="margin-top:26px">
<div class="section__head">
<span class="cn">待你决定<span class="cn__plain">审批与候选</span></span>
</div>
<div class="card" style="padding:6px 18px">
<div class="list-row" href="#">
<span class="approval__seal" aria-hidden="true" style="flex:none">命</span>
<div class="list-row__body">
<div class="list-row__title">请命 · 写入日历(6 个事件)</div>
<div class="list-row__sub">青梧请求在日历创建 6 个「共读讨论」事件 · 数据范围:仅日历 · 费用:无</div>
</div>
<a class="btn btn--cinnabar btn--sm" href="conversation.html">去朱批</a>
</div>
<div class="list-row">
<span class="badge" style="flex:none;border-color:color-mix(in srgb,var(--warn) 40%,transparent);color:var(--warn)">息壤候选 ×3</span>
<div class="list-row__body">
<div class="list-row__title">「读书会在隔周四晚」「偏爱短篇」「花粉过敏(重忆)」</div>
<div class="list-row__sub">来自青梧的对话候选 · 归真后才会影响未来上下文</div>
</div>
<a class="btn btn--outline btn--sm" href="memory.html">去审阅</a>
</div>
<div class="list-row">
<span class="badge" style="flex:none">叩心候选</span>
<div class="list-row__body">
<div class="list-row__title">青梧想在明晚共读前发一条提醒</div>
<div class="list-row__sub">叩心当前静默 · 不回应不会降低关系 · 可设频率上限</div>
</div>
<a class="btn btn--ghost btn--sm" href="settings.html">了解叩心</a>
</div>
</div>
</section>
</div>
</main>
</div>
<script src="assets/app.js?v=3"></script>
</body>
</html>
+243
View File
@@ -0,0 +1,243 @@
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>魂镜 Hunjing · 界面原型 · 设计说明</title>
<link rel="stylesheet" href="assets/app.css?v=10">
</head>
<body>
<svg style="display:none" aria-hidden="true">
<symbol id="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></symbol>
<symbol id="i-sun" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41"/></symbol>
<symbol id="i-home" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="M9 22V12h6v10"/></symbol>
<symbol id="i-branch" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="6" y1="3" x2="6" y2="15"/><circle cx="18" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/></symbol>
<symbol id="i-book" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></symbol>
<symbol id="i-user" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></symbol>
<symbol id="i-layers" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"/><polyline points="2 17 12 22 22 17"/><polyline points="2 12 12 17 22 12"/></symbol>
<symbol id="i-kanban" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3h4v18H5z"/><path d="M10 3h4v12h-4z"/><path d="M15 3h4v8h-4z"/></symbol>
<symbol id="i-package" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></symbol>
<symbol id="i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></symbol>
<symbol id="i-bag" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 0 1-8 0"/></symbol>
<symbol id="i-shield" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></symbol>
<symbol id="i-sliders" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></symbol>
<symbol id="i-monitor" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></symbol>
<symbol id="i-route" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="19" r="3"/><circle cx="18" cy="5" r="3"/><path d="M12 19h4.5a3.5 3.5 0 0 0 0-7h-9a3.5 3.5 0 0 1 0-7H12"/></symbol>
<symbol id="i-globe" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></symbol>
<symbol id="i-chevrons" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="11 17 6 12 11 7"/><polyline points="18 17 13 12 18 7"/></symbol>
</svg>
<div class="app">
<aside class="sidebar">
<div class="brand">
<div class="brand__mark" aria-hidden="true"></div>
<div class="brand__text">
<div class="brand__name">魂镜</div>
<div class="brand__sub">Hunjing</div>
</div>
</div>
<nav class="side-nav" aria-label="主导航">
<div class="nav-group">
<div class="nav-group__title">原型</div>
<a class="nav-item is-active" href="index.html"><svg><use href="#i-home"/></svg><span class="cn">设计说明</span><span class="nav-plain">索引</span></a>
</div>
<div class="nav-group"><div class="nav-group__title">常用</div><a class="nav-item" href="home.html"><svg><use href="#i-home"/></svg><span class="cn">镜庭</span><span class="nav-plain">首页</span></a><a class="nav-item" href="conversation.html"><svg><use href="#i-branch"/></svg><span class="cn">镜树</span><span class="nav-plain">对话</span></a><a class="nav-item" href="characters.html"><svg><use href="#i-user"/></svg><span class="cn">镜生</span><span class="nav-plain">角色</span></a><a class="nav-item" href="memory.html"><svg><use href="#i-book"/></svg><span class="cn">息壤</span><span class="nav-plain">记忆</span></a><a class="nav-item" href="avatar.html"><svg><use href="#i-layers"/></svg><span class="cn">形仪</span><span class="nav-plain">形象</span></a></div>
<div class="nav-group"><div class="nav-group__title">创造</div><a class="nav-item" href="agent-workspace.html"><svg><use href="#i-kanban"/></svg><span class="cn">天工阁</span><span class="nav-plain">任务</span></a><a class="nav-item" href="plugins.html"><svg><use href="#i-package"/></svg><span class="cn">百工坊</span><span class="nav-plain">插件</span></a><a class="nav-item" href="collaboration.html"><svg><use href="#i-users"/></svg><span class="cn">同契台</span><span class="nav-plain">协作</span></a><a class="nav-item" href="model-gateway.html"><svg><use href="#i-route"/></svg><span class="cn">神识阁</span><span class="nav-plain">模型</span></a></div>
<div class="nav-group"><div class="nav-group__title">世界</div><a class="nav-item" href="community.html"><svg><use href="#i-globe"/></svg><span class="cn">雅集</span><span class="nav-plain">社区</span></a><a class="nav-item" href="marketplace.html"><svg><use href="#i-bag"/></svg><span class="cn">云市</span><span class="nav-plain">市场</span></a></div>
<div class="nav-group"><div class="nav-group__title">治理与账户</div><a class="nav-item" href="governance.html"><svg><use href="#i-shield"/></svg><span class="cn">司命台</span><span class="nav-plain">治理</span></a><a class="nav-item" href="devices.html"><svg><use href="#i-monitor"/></svg><span class="cn">器谱</span><span class="nav-plain">设备</span></a><a class="nav-item" href="settings.html"><svg><use href="#i-sliders"/></svg><span class="cn">设置</span><span class="nav-plain">账户</span></a></div>
</nav>
<div class="side-foot">
<button class="icon-btn side-fold-btn" data-sidebar-fold aria-label="收起侧栏" title="收起 / 展开侧栏(记忆偏好)"><svg><use href="#i-chevrons"/></svg></button>
<button class="icon-btn" data-theme-toggle aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
<span style="font-size:11.5px;color:var(--text-3)">墨 / 月白 双主题</span>
</div>
</aside>
<main class="main">
<header class="topbar">
<div class="crumbs"><span class="cn">设计说明</span><span class="crumbs__sep">/</span><span class="here">静态原型 v0.1</span></div>
<div class="topbar__spacer"></div>
<span class="prototype-tag">静态原型 · 待审查 · 确认后转 React</span>
<button class="icon-btn" data-theme-toggle aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</header>
<div class="content doc">
<div class="doc-hero">
<h1>魂镜 <span class="ver">原型 v0.2</span></h1>
<p>魂镜 Web 界面静态 HTML 原型(v0.1 第一批方向已确认,v0.2 增补第二批共 15 个界面),供审查视觉方向、布局结构与文化语言的界面落地方式。全部确认后按此实现为 React 组件;未在本文档登记的视觉细节以本页令牌为准。</p>
</div>
<section class="doc-sec">
<h2>原型页面</h2>
<p class="sub">第一批(已确认):镜庭、镜生、镜树;第二批:息壤、形仪、天工阁、神识阁、百工坊、雅集、同契台、云市、器谱、司命台、设置,及运营者/自托管使用的管理面与认证页。全站链接已疏通:跨页指向对应页面、页内为锚点;logo 单击回本目录,350ms 内连点 5 次触发「镜启」彩蛋(承接 main 分支旧版设计);侧栏可折叠并记忆偏好。</p>
<div class="page-nav">
<a class="card" href="home.html"><span class="cn">镜庭<span class="cn__plain">个人首页</span></span><span class="d">全局框架、角色入口、任务与待审事项</span><span class="p">home.html</span></a>
<a class="card" href="conversation.html"><span class="cn">镜树<span class="cn__plain">分支对话</span></span><span class="d">ContentBlock、请命朱批、界域、候答、流式芽体、分支树</span><span class="p">conversation.html</span></a>
<a class="card" href="characters.html"><span class="cn">镜生<span class="cn__plain">角色身份</span></span><span class="d">道体、缘契、内驱力、大周天、谱系、生命周期</span><span class="p">characters.html</span></a>
<a class="card" href="memory.html"><span class="cn">息壤<span class="cn__plain">记忆与知识</span></span><span class="d">候选审阅、正影纠正、明忆版本、玄络投影</span><span class="p">memory.html</span></a>
<a class="card" href="avatar.html"><span class="cn">形仪<span class="cn__plain">形象与资产</span></span><span class="d">真形锚、主仪化仪、声音、Live2D 与 3D、易相历史</span><span class="p">avatar.html</span></a>
<a class="card" href="agent-workspace.html"><span class="cn">天工阁<span class="cn__plain">Agent 任务</span></span><span class="d">工筹计划、预算、分工使、轨迹、验收</span><span class="p">agent-workspace.html</span></a>
<a class="card" href="model-gateway.html"><span class="cn">神识阁<span class="cn__plain">模型与路由</span></span><span class="d">逻辑模型、路由继承链、BYOK、用量观测</span><span class="p">model-gateway.html</span></a>
<a class="card" href="plugins.html"><span class="cn">百工坊<span class="cn__plain">插件生态</span></span><span class="d">沙箱、已安装、升级权限确认、授契记录</span><span class="p">plugins.html</span></a>
<a class="card" href="community.html"><span class="cn">雅集<span class="cn__plain">社区广场</span></span><span class="d">动态流、角色谱、话题、推荐解释与重置</span><span class="p">community.html</span></a>
<a class="card" href="collaboration.html"><span class="cn">同契台<span class="cn__plain">协作空间</span></span><span class="d">分支版本、审稿合卷、成员权限矩阵、活动</span><span class="p">collaboration.html</span></a>
<a class="card" href="marketplace.html"><span class="cn">云市<span class="cn__plain">创作市场</span></span><span class="d">商品、市契许可、退契规则、分润结算</span><span class="p">marketplace.html</span></a>
<a class="card" href="devices.html"><span class="cn">器谱<span class="cn__plain">设备与感知</span></span><span class="d">形器登记、授契、通感会话、直白权限请求</span><span class="p">devices.html</span></a>
<a class="card" href="governance.html"><span class="cn">司命台<span class="cn__plain">安全与治理</span></span><span class="d">治理队列、诊断双重授权、审计、安全概览</span><span class="p">governance.html</span></a>
<a class="card" href="admin.html"><span class="cn">管理面<span class="cn__plain">运营与部署后台</span></span><span class="d">司议队列、支持工单与脱敏支持包、权限管理(RBAC / 双人授权)、部署健康(灵台双形态)、SLO</span><span class="p">admin.html</span></a>
<a class="card" href="login.html"><span class="cn">登录<span class="cn__plain">铜镜鉴心</span></span><span class="d">铭文环镜背、扫描亮带、会话 Cookie / PKCE 说明、通行密钥与恢复钥匙</span><span class="p">login.html</span></a>
<a class="card" href="register.html"><span class="cn">注册<span class="cn__plain">创建账户</span></span><span class="d">邮箱验证码、数据权告知(默认不训练 / 可导出删除 / 私箧持钥)、条款确认</span><span class="p">register.html</span></a>
<a class="card" href="settings.html"><span class="cn">设置<span class="cn__plain">账户与偏好</span></span><span class="d">会话、私箧、数据权、删除、封镜</span><span class="p">settings.html</span></a>
</div>
</section>
<section class="doc-sec">
<h2>设计立场</h2>
<p class="sub">四条约束所有页面的决定,审查时优先核对这四条是否成立。</p>
<div class="card" style="display:flex;flex-direction:column;gap:12px">
<div><b class="cn">一 · 双层文字系统</b><span style="color:var(--text-2)"> —— 文化名用衬线宋体,直白解释用无衬线小字,两种字体本身就是"文化名 · 直白解释"两层结构的可视化;风险、金额、权限、删除等后果始终以直白语言为主,文化名只作辅助。</span></div>
<div><b class="cn">二 · 朱砂只属于朱批</b><span style="color:var(--text-2)"> —— 朱砂色是"用户确认决定"的专用语义色:请命卡的允许按钮、危险动作入口使用它;普通操作一律铜镜青。颜色即权限语言。</span></div>
<div><b class="cn">三 · 墨与月白</b><span style="color:var(--text-2)"> —— 深色为墨(青调黑,非纯黑),浅色为月白(青灰白,非暖米);铜镜青为主色,取铜镜铜绿之意,不用蓝紫系默认色。</span></div>
<div><b class="cn">四 · 状态永远三段式</b><span style="color:var(--text-2)"> —— 状态徽章固定为「文化状态 · 直白状态 + 稳定工程值」,例如「运转 · 运行中 <span class="mono">running</span>」;错误与交易状态绝不只显示文化名。</span></div>
</div>
</section>
<section class="doc-sec">
<h2>色彩令牌</h2>
<p class="sub">右下角可切换主题;以下色板随主题联动。转 React 时这些令牌进入 Tailwind 配置 / CSS 变量。</p>
<div class="swatches">
<div class="swatch"><div class="swatch__c" style="background:var(--bg);border-bottom:1px solid var(--line-soft)"></div><div class="swatch__m"><b>底 · 墨 / 月白</b>表面层级 0<span class="mono">--bg</span></div></div>
<div class="swatch"><div class="swatch__c" style="background:var(--bg-raised)"></div><div class="swatch__m"><b>浮面</b>卡片与气泡<span class="mono">--bg-raised</span></div></div>
<div class="swatch"><div class="swatch__c" style="background:var(--accent)"></div><div class="swatch__m"><b>铜镜青</b>主色 · 选中/链接/运转<span class="mono">--accent</span></div></div>
<div class="swatch"><div class="swatch__c" style="background:var(--cinnabar)"></div><div class="swatch__m"><b>朱砂</b>朱批 · 确认与危险<span class="mono">--cinnabar</span></div></div>
<div class="swatch"><div class="swatch__c" style="background:var(--ok)"></div><div class="swatch__m"><b>已成</b>完成态<span class="mono">--ok</span></div></div>
<div class="swatch"><div class="swatch__c" style="background:var(--warn)"></div><div class="swatch__m"><b>秋香</b>整备 / 幻境<span class="mono">--warn</span></div></div>
<div class="swatch"><div class="swatch__c" style="background:var(--err)"></div><div class="swatch__m"><b>受阻</b>失败态<span class="mono">--err</span></div></div>
<div class="swatch"><div class="swatch__c" style="background:var(--text-1)"></div><div class="swatch__m"><b>正文</b>一级文字<span class="mono">--text-1</span></div></div>
</div>
</section>
<section class="doc-sec">
<h2>字体规范</h2>
<p class="sub">不引入外部字体文件,使用系统中文字体栈;转 React 时同栈迁移。</p>
<div class="card type-spec">
<div class="type-spec__row"><span class="type-spec__label">文化名 · 宋体衬线</span><span class="type-spec__sample cn" style="font-size:22px;font-weight:600">镜树 · 分支对话</span></div>
<div class="type-spec__row"><span class="type-spec__label">界面正文 · 无衬线</span><span class="type-spec__sample" style="font-size:14px">正文 14px / 行高 1.65,辅助文字 12.5px,元信息 11.5px</span></div>
<div class="type-spec__row"><span class="type-spec__label">稳定值 · 等宽</span><span class="type-spec__sample mono" style="font-size:13px">running · m_01h8xq… · block_id: blk_7f3a</span></div>
</div>
</section>
<section class="doc-sec">
<h2>状态徽章全集</h2>
<p class="sub">对应 docs/product/cultural-language.md 第 10 节;徽章三段:文化状态 · 直白状态 · 稳定值。</p>
<div class="card">
<div class="table-wrap"><table class="data badge-table">
<thead><tr><th>徽章</th><th>稳定值</th><th>使用场景</th></tr></thead>
<tbody>
<tr><td><span class="badge badge--muted"><span class="badge__dot"></span>待启 · 排队中 <span class="mono">queued</span></span></td><td class="mono">queued</td><td>Run / 媒体任务排队</td></tr>
<tr><td><span class="badge badge--info"><span class="badge__dot"></span>运转 · 运行中 <span class="mono">running</span></span></td><td class="mono">running</td><td>Run 执行中</td></tr>
<tr><td><span class="badge badge--warn"><span class="badge__dot"></span>请命中 · 等待确认 <span class="mono">waiting_approval</span></span></td><td class="mono">waiting_approval</td><td>等待朱批</td></tr>
<tr><td><span class="badge badge--ok"><span class="badge__dot"></span>已成 · 已完成 <span class="mono">completed</span></span></td><td class="mono">completed</td><td>Run / 任务完成</td></tr>
<tr><td><span class="badge badge--err"><span class="badge__dot"></span>受阻 · 失败 <span class="mono">failed</span></span></td><td class="mono">failed</td><td>失败(附原因与重试)</td></tr>
<tr><td><span class="badge badge--muted"><span class="badge__dot"></span>已止 · 已取消 <span class="mono">cancelled</span></span></td><td class="mono">cancelled</td><td>用户取消</td></tr>
<tr><td><span class="badge badge--muted"><span class="badge__dot"></span>守一 · 安静待命 <span class="mono">idle</span></span></td><td class="mono">idle</td><td>角色无运行</td></tr>
<tr><td><span class="badge badge--warn"><span class="badge__dot"></span>整备 · 正在处理 <span class="mono">processing</span></span></td><td class="mono">processing</td><td>媒体 / 资源处理</td></tr>
<tr><td><span class="badge badge--warn"><span class="badge__dot"></span>待审 · 等待审核 <span class="mono">pending_review</span></span></td><td class="mono">pending_review</td><td>社区 / 市场审核</td></tr>
<tr><td><span class="badge badge--ok"><span class="badge__dot"></span>已刊 · 已发布 <span class="mono">published</span></span></td><td class="mono">published</td><td>社区内容</td></tr>
</tbody>
</table></div>
</div>
</section>
<section class="doc-sec">
<h2>组件样例</h2>
<p class="sub">按钮语义:铜镜青为主操作,朱砂仅用于朱批(用户确认决定)与危险操作,描边为次操作。</p>
<div class="card demo-block">
<div class="demo-row">
<button class="btn btn--primary">开始对话</button>
<button class="btn btn--cinnabar">允许(朱批)</button>
<button class="btn btn--outline">查看谱系</button>
<button class="btn btn--ghost">取消</button>
<button class="btn btn--danger">删除角色数据</button>
<button class="btn btn--outline btn--sm">续生</button>
</div>
<div class="demo-row">
<span class="cn" style="font-size:16px">请命<span class="cn__plain">请求你的确认</span></span>
<span class="cn" style="font-size:16px">息壤<span class="cn__plain">角色记忆</span></span>
<span class="cn" style="font-size:16px">幻境<span class="cn__plain">临时试演 · 不入正史</span></span>
</div>
</div>
<div class="card demo-block">
<div class="block__head" style="border-radius:var(--radius) var(--radius) 0 0"><span class="lang">python</span><span class="fname">reading_progress.py</span><span class="acts"><button class="icon-btn" style="width:26px;height:26px" aria-label="复制源码"><svg style="width:13px;height:13px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg></button></span></div>
<pre class="code"><span class="c"># 汇总共读接龙进度(示意)</span>
<span class="k">from</span> pathlib <span class="k">import</span> Path
<span class="k">def</span> <span class="f">summarize</span>(records: <span class="k">list</span>[<span class="k">dict</span>]) -&gt; <span class="k">dict</span>:
done = [r <span class="k">for</span> r <span class="k">in</span> records <span class="k">if</span> r[<span class="s">"finished"</span>]]
<span class="k">return</span> {
<span class="s">"total"</span>: <span class="f">len</span>(records),
<span class="s">"finished"</span>: <span class="f">len</span>(done),
<span class="s">"pending"</span>: [r[<span class="s">"name"</span>] <span class="k">for</span> r <span class="k">in</span> records <span class="k">if</span> <span class="k">not</span> r[<span class="s">"finished"</span>]],
}</pre>
</div>
<div class="card demo-block">
<div class="math">注意力权重 = softmax( QK<sup>T</sup> / √d<sub>k</sub> ) · V
<span class="math__fallback">fallback:注意力权重等于 Q、K 转置乘积经缩放与归一化后对 V 的加权求和</span>
</div>
</div>
</section>
<section class="doc-sec">
<h2>审查重点</h2>
<p class="sub">第一批(色彩、字体、镜树/镜生/镜庭结构)已确认;本轮重点核对第二批页面,反馈时按页名 + 位置描述即可。</p>
<div class="card" style="display:flex;flex-direction:column;gap:10px">
<div>1. 息壤:候选审阅的「归真入忆 / 正影纠正 / 忽略」操作,以及大周天来源、重忆提示的呈现是否可理解。</div>
<div>2. 天工阁:工筹步骤、预算、分工使、轨迹的信息层级是否符合你对 Run 治理的预期。</div>
<div>3. 神识阁 / 百工坊:路由继承链与「升级新增权限需重新确认」的展示是否清晰,朱批语义是否仍然专一。</div>
<div>4. 云市:金额、分润、退契规则是否足够直白(文化名没有掩盖交易后果)。</div>
<div>5. 器谱 / 司命台 / 设置:直白权限句、双重授权、私箧与删除等高风险项的措辞与视觉重量。</div>
<div>6. 雅集 / 同契台:社区帖卡与协作审稿流的信息密度是否合适。</div>
</div>
</section>
<section class="doc-sec">
<h2>旧版传承与候选</h2>
<p class="sub">已系统挖掘 main 分支旧版 25 页设计原型(铜镜鉴心体系),按「取手法、不照搬旧概念名」原则融入——六爻 / 九枢 / 三魂等概念 1.0 已由小周天、灵台六模块、内驱力等替代,仅传承其可视化手法。</p>
<div class="card">
<div class="table-wrap"><table class="data">
<thead><tr><th>旧版想法</th><th>来源页</th><th>状态</th></tr></thead>
<tbody>
<tr><td>鎏金发丝线三档令牌</td><td>tokens.css</td><td class="mark-ok">✓ 已融入全站(分组标题 / 金标竖条 / 品牌外环 / 时间线)</td></tr>
<tr><td>logo 五连击「镜启」诗签彩蛋</td><td>_theme.js</td><td class="mark-ok">✓ 已融入(修好首次单击即跳转的缺陷)</td></tr>
<tr><td>铜镜登录页(铭文环 / 铜面噪点 / 扫描亮带)</td><td>copper-mirror-login</td><td class="mark-ok">✓ 已融入登录 / 注册页</td></tr>
<tr><td>极光铜晕底 + 卡片 hover 光扫</td><td>_base.css / rune-engine</td><td class="mark-ok">✓ 已融入全站(极淡,不干扰阅读)</td></tr>
<tr><td>日晷时辰盘 + 节气 + 相伴日文案</td><td>time</td><td class="mark-ok">✓ 已融入镜庭 hero(巳时 · 白露 · 第 918 日)</td></tr>
<tr><td>朱批卡风险分级(RISK L2)</td><td>chat-redesign</td><td class="mark-ok">✓ 已融入镜树请命卡</td></tr>
<tr><td>「呈镜」发送按钮命名(旧版已确立血脉)</td><td>chat-redesign</td><td class="mark-ok">✓ 已融入镜树输入区(aria 仍读「发送」)</td></tr>
<tr><td>运行阶段爻象三态(done / active / pending)</td><td>chat / evolution</td><td class="mark-ok">✓ 已融入天工阁工筹(active 步骤鎏金光晕)</td></tr>
<tr><td>河图置信度图谱(置信→线宽,假设→朱漆虚线待验)</td><td>world</td><td class="mark-ok">✓ 已融入息壤玄络(待验边 + 标注)</td></tr>
<tr><td>息壤浮现(本次回应用了哪些记忆)</td><td>chat / copper-v2</td><td class="mark-ok">✓ 对应 1.0 上下文镜(镜树右栏,同源 ContextSnapshot)</td></tr>
<tr><td>九枢星盘「活的仪器」+ 铜镜四态健康词汇</td><td>admin / copper-v2</td><td class="mark-ok">✓ 已复刻为灵台六枢星盘(太一居中 + 五枢环绕 + 呼吸刻度 / 慢旋 / 告警闪烁)+ 镜态徽章(管理面)</td></tr>
<tr><td>五行生克健康环(系统健康=关系动力学)</td><td>wuxing</td><td class="mark-ok">✓ 已复刻为相生 / 相克指标对告警(管理面星盘卡;环状图 React 阶段评估)</td></tr>
<tr><td>眉批 depth 标尺注入预览</td><td>margin-notes</td><td style="color:var(--warn)">候选 —— 上下文镜深度维度(React 阶段与 Context Manifest 联动)</td></tr>
<tr><td>好奇萤火(亮度=期望值)与探索天平</td><td>drive</td><td class="mark-ok">✓ 萤火已融入内驱力维度(亮度=维度值);探索天平待天工阁预算增强时评估</td></tr>
<tr><td>周天四镜阶段链(评 / 演 / 候 / 藏 四面小铜镜)</td><td>evolution</td><td class="mark-ok">✓ 已复刻为大周天四镜:回 / 照 / 议 / 呈(镜生页,ADR-023 四阶段)</td></tr>
<tr><td>会话列表「今日 / 本周 / 更早」分组 + 彩点状态</td><td>chat-redesign</td><td class="mark-ok">✓ 已融入镜树会话列表(活跃铜绿 / 幻境秋香 / 待朱批朱砂)</td></tr>
<tr><td>「深虑 / 博闻」输入控制药丸 + 用户消息鎏金右边线</td><td>chat-redesign / copper-v2</td><td class="mark-ok">✓ 已融入镜树输入区与用户气泡</td></tr>
<tr><td>起居注时间河「卷」章分割</td><td>admin</td><td class="mark-ok">✓ 已融入管理面审计快照</td></tr>
<tr><td>太极阴阳平衡 gauge(三态)</td><td>cosmos</td><td class="mark-ok">✓ 已复刻为朱批治理阴阳平衡(司命台,阳亢 / 平衡 / 阴盛)</td></tr>
<tr><td>角色 card-banner 渐变横幅</td><td>character-detail</td><td class="mark-ok">✓ 已融入镜生详情页</td></tr>
<tr><td>思考块折叠卡(复刻 chat-redesign)</td><td>chat-redesign</td><td class="mark-ok">✓ 已融入(用户确认):思考摘要可折叠 + 深虑强度(低/中/高)——<b>契约候选</b>:正式实现前需在 content-blocks 契约登记 <span class="mono">thinking</span> 块类型与流式语义;摘要仅会话内可见,不入长期记录与诊断导出</td></tr>
</tbody>
</table></div>
</div>
</section>
</div>
</main>
</div>
<script src="assets/app.js?v=3"></script>
</body>
</html>
+87
View File
@@ -0,0 +1,87 @@
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>魂镜 · 登录</title>
<link rel="stylesheet" href="assets/app.css?v=10">
</head>
<body>
<svg style="display:none" aria-hidden="true">
<symbol id="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></symbol>
<symbol id="i-lock" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></symbol>
<symbol id="i-key" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4"/></symbol>
<symbol id="i-fingerprint" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 11a4 4 0 0 1 4 4v5"/><path d="M8 15a4 4 0 0 1 1-2.7"/><path d="M4 15a8 8 0 0 1 8-8 8 8 0 0 1 6.7 3.7"/><path d="M12 19v2"/><path d="M4.9 10.3A8 8 0 0 1 12 3a8 8 0 0 1 8 8c0 1-.1 2.3-.4 3"/></symbol>
</svg>
<div class="stage">
<div class="stage__bg" aria-hidden="true">
<div class="stage__rings">
<svg viewBox="0 0 800 800">
<defs><path id="ringpath" d="M400,400 m-300,0 a300,300 0 1,1 600,0 a300,300 0 1,1 -600,0"/></defs>
<circle class="ring-ink" cx="400" cy="400" r="392"/>
<circle class="ring-faint" cx="400" cy="400" r="336"/>
<g class="ring-slow"><circle class="ring-faint" cx="400" cy="400" r="272"/></g>
<circle class="ring-ink" cx="400" cy="400" r="206"/>
<circle class="ring-faint" cx="400" cy="400" r="158"/>
<g class="ring-slow" style="animation-direction:reverse"><circle class="ring-faint" cx="400" cy="400" r="104"/></g>
<text fill="var(--gilt-faint)" font-size="12" letter-spacing="6" style="font-family:var(--font-serif)">
<textPath href="#ringpath">镜中有镜 · 心外无心 · 汝来看此镜时 · 此镜亦照汝 · 铜镜本无字 · 照尽往来人 ·</textPath>
</text>
</svg>
</div>
<svg style="position:absolute;inset:0;width:100%;height:100%;opacity:.035" aria-hidden="true"><filter id="grain"><feTurbulence type="fractalNoise" baseFrequency="0.8" numOctaves="2"/></filter><rect width="100%" height="100%" filter="url(#grain)"/></svg>
</div>
<header class="stage__topbar">
<span style="font-size:12px;color:var(--text-3)">静态原型 · 待审查</span>
<span class="spacer"></span>
<a href="index.html" style="font-size:12px;color:var(--text-3)">原型目录</a>
<button class="icon-btn" data-theme-toggle aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</header>
<main class="stage__main">
<div class="mirror-card">
<div class="mirror-card__brand">
<div class="brand__mark" aria-hidden="true"></div>
<div>
<div style="font-family:var(--font-serif);font-size:20px;font-weight:600;line-height:1.2">魂镜</div>
<div style="font-size:11px;color:var(--text-3)">Hunjing</div>
</div>
</div>
<div class="mirror-card__title">
<h1>登入魂镜</h1>
</div>
<p class="mirror-card__sub">长期 AI 角色、Agent 与创作社区平台</p>
<form onsubmit="return false">
<div class="field-group">
<label for="login-email">邮箱</label>
<input class="input" id="login-email" type="email" autocomplete="username" placeholder="you@example.com">
</div>
<div class="field-group">
<label for="login-pwd">密码</label>
<input class="input" id="login-pwd" type="password" autocomplete="current-password" placeholder="••••••••">
</div>
<a class="btn btn--primary" href="home.html" style="width:100%;margin-top:6px">登入</a>
</form>
<div class="login-alt">其他方式</div>
<div style="display:flex;gap:10px">
<a class="btn btn--outline btn--sm" href="#" style="flex:1" title="通行密钥(WebAuthn)"><svg><use href="#i-fingerprint"/></svg>通行密钥</a>
<a class="btn btn--outline btn--sm" href="#" style="flex:1" title="恢复钥匙(离线恢复码)"><svg><use href="#i-key"/></svg>恢复钥匙</a>
</div>
<p class="login-note">
Web 使用安全会话 Cookie(OAuth 2.1);桌面与移动客户端使用 Authorization Code + PKCE。<br>
凭据只经 Header 传递,不进入 URL、日志或页面。连续失败将触发限流与通知。
</p>
<div class="login-foot">
还没有账户?<a href="register.html">创建账户</a>
</div>
</div>
</main>
</div>
<script src="assets/app.js?v=3"></script>
</body>
</html>
+140
View File
@@ -0,0 +1,140 @@
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>云市 · 创作市场 — 魂镜 Hunjing</title>
<link rel="stylesheet" href="assets/app.css?v=10">
</head>
<body>
<svg style="display:none" aria-hidden="true"><symbol id="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></symbol><symbol id="i-home" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="M9 22V12h6v10"/></symbol><symbol id="i-branch" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="6" y1="3" x2="6" y2="15"/><circle cx="18" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/></symbol><symbol id="i-user" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></symbol><symbol id="i-book" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></symbol><symbol id="i-layers" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"/><polyline points="2 17 12 22 22 17"/><polyline points="2 12 12 17 22 12"/></symbol><symbol id="i-kanban" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3h4v18H5z"/><path d="M10 3h4v12h-4z"/><path d="M15 3h4v8h-4z"/></symbol><symbol id="i-package" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></symbol><symbol id="i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></symbol><symbol id="i-route" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="19" r="3"/><circle cx="18" cy="5" r="3"/><path d="M12 19h4.5a3.5 3.5 0 0 0 0-7h-9a3.5 3.5 0 0 1 0-7H12"/></symbol><symbol id="i-globe" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></symbol><symbol id="i-bag" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 0 1-8 0"/></symbol><symbol id="i-shield" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></symbol><symbol id="i-monitor" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></symbol><symbol id="i-sliders" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></symbol><symbol id="i-search" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></symbol><symbol id="i-download" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></symbol><symbol id="i-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></symbol><symbol id="i-clock" viewBox="0 0 24 24" fill="none" sLine truncated
</svg>
<div class="app">
<aside class="sidebar">
<div class="brand">
<div class="brand__mark" aria-hidden="true"></div>
<div class="brand__text">
<div class="brand__name">魂镜</div>
<div class="brand__sub">Hunjing</div>
</div>
</div>
<nav class="side-nav" aria-label="主导航"><div class="nav-group"><div class="nav-group__title">常用</div><a class="nav-item" href="home.html"><svg><use href="#i-home"/></svg><span class="cn">镜庭</span><span class="nav-plain">首页</span></a><a class="nav-item" href="conversation.html"><svg><use href="#i-branch"/></svg><span class="cn">镜树</span><span class="nav-plain">对话</span></a><a class="nav-item" href="characters.html"><svg><use href="#i-user"/></svg><span class="cn">镜生</span><span class="nav-plain">角色</span></a><a class="nav-item" href="memory.html"><svg><use href="#i-book"/></svg><span class="cn">息壤</span><span class="nav-plain">记忆</span></a><a class="nav-item" href="avatar.html"><svg><use href="#i-layers"/></svg><span class="cn">形仪</span><span class="nav-plain">形象</span></a></div><div class="nav-group"><div class="nav-group__title">创造</div><a class="nav-item" href="agent-workspace.html"><svg><use href="#i-kanban"/></svg><span class="cn">天工阁</span><span class="nav-plain">任务</span></a><a class="nav-item" href="plugins.html"><svg><use href="#i-package"/></svg><span class="cn">百工坊</span><span class="nav-plain">插件</span></a><a class="nav-item" href="collaboration.html"><svg><use href="#i-users"/></svg><span class="cn">同契台</span><span class="nav-plain">协作</span></a><a class="nav-item" href="model-gateway.html"><svg><use href="#i-route"/></svg><span class="cn">神识阁</span><span class="nav-plain">模型</span></a></div><div class="nav-group"><div class="nav-group__title">世界</div><a class="nav-item" href="community.html"><svg><use href="#i-globe"/></svg><span class="cn">雅集</span><span class="nav-plain">社区</span></a><a class="nav-item is-active" aria-current="page" href="marketplace.html"><svg><use href="#i-bag"/></svg><span class="cn">云市</span><span class="nav-plain">市场</span></a></div><div class="nav-group"><div class="nav-group__title">治理与账户</div><a class="nav-item" href="governance.html"><svg><use href="#i-shield"/></svg><span class="cn">司命台</span><span class="nav-plain">治理</span></a><a class="nav-item" href="devices.html"><svg><use href="#i-monitor"/></svg><span class="cn">器谱</span><span class="nav-plain">设备</span></a><a class="nav-item" href="settings.html"><svg><use href="#i-sliders"/></svg><span class="cn">设置</span><span class="nav-plain">账户</span></a></div></nav>
<div class="side-foot">
<button class="icon-btn side-fold-btn" data-sidebar-fold aria-label="收起侧栏" title="收起 / 展开侧栏(记忆偏好)"><svg><use href="#i-chevrons"/></svg></button>
<span class="avatar avatar--sm avatar--user">舟</span>
<span style="font-size:12.5px">云舟</span>
<button class="icon-btn" data-theme-toggle style="margin-left:auto" aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</div>
</aside>
<main class="main">
<header class="topbar">
<div class="crumbs"><span class="cn">云市</span><span class="crumbs__sep">·</span><span class="here">创作市场</span></div>
<div class="topbar__spacer"></div>
<span class="prototype-tag">静态原型 · 待审查</span>
<button class="icon-btn" data-theme-toggle aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</header>
<div class="content">
<div class="realm-banner" role="note">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 0 1-8 0"/></svg>
购买的是版本与许可(市契),不是人格所有权。金额、费率与退款规则始终直白展示,文化名只作辅助。
</div>
<div style="display:flex;gap:12px;align-items:center;margin-bottom:16px;flex-wrap:wrap">
<div class="chips" style="margin-bottom:0">
<button class="chip is-on">全部</button>
<button class="chip">角色模板</button>
<button class="chip">世界设定</button>
<button class="chip">Live2D</button>
<button class="chip">3D 资产</button>
<button class="chip">音色包</button>
<button class="chip">插件</button>
</div>
<div class="searchbar" style="flex:1;min-width:200px">
<svg><use href="#i-search"/></svg>
<input type="search" placeholder="搜索商品 / 创作者" aria-label="搜索市场">
</div>
</div>
<section class="section">
<div class="asset-grid">
<div class="asset-card">
<div class="asset-thumb" style="background:linear-gradient(150deg,#2f4858,#6a8caf 60%,#3b5a70)"><span class="glyph">雾</span><span class="asset-type">世界设定</span></div>
<div class="asset-body"><a class="asset-name" href="#license" style="color:inherit;text-decoration:underline;text-decoration-color:var(--gilt-dim);text-underline-offset:3px">雾中茶寮 · 世界合集</a><span class="asset-sub">雪袖的茶寮 · v3 · 售出 412</span>
<div style="display:flex;align-items:center;justify-content:space-between;margin-top:2px"><span class="price">¥28.00</span><span class="mem-type">可商用</span></div>
</div>
</div>
<div class="asset-card">
<div class="asset-thumb" style="background:linear-gradient(150deg,#4b3a2f,#a3815f 60%,#5d4a3a)"><span class="glyph">灯</span><span class="asset-type">角色模板</span></div>
<div class="asset-body"><span class="asset-name">照夜 · 掌灯人模板</span><span class="asset-sub">沉舟 · v2 · 售出 1,208</span>
<div style="display:flex;align-items:center;justify-content:space-between;margin-top:2px"><span class="price">¥12.00</span><span class="mem-type">个人用</span></div>
</div>
</div>
<div class="asset-card">
<div class="asset-thumb" style="background:linear-gradient(150deg,#233b37,#3f7a6e 60%,#2a4d47)"><span class="glyph">灵</span><span class="asset-type">Live2D</span></div>
<div class="asset-body"><span class="asset-name">守砚人 · 灵动模型</span><span class="asset-sub">云舟 · v3 · 售出 96</span>
<div style="display:flex;align-items:center;justify-content:space-between;margin-top:2px"><span class="price">¥45.00</span><span class="mem-type">可商用</span></div>
</div>
</div>
<div class="asset-card">
<div class="asset-thumb" style="background:linear-gradient(150deg,#37343f,#635d7a 60%,#443f52)"><span class="glyph">匣</span><span class="asset-type">音色包</span></div>
<div class="asset-body"><span class="asset-name">江南雨声 · 环境音色</span><span class="asset-sub">听澜 · v1 · 售出 340</span>
<div style="display:flex;align-items:center;justify-content:space-between;margin-top:2px"><span class="price price--free">免费</span><span class="mem-type">署名使用</span></div>
</div>
</div>
<div class="asset-card">
<div class="asset-thumb" style="background:linear-gradient(150deg,#33392e,#6e8455 60%,#414a37)"><span class="glyph">砚</span><span class="asset-type">3D 资产</span></div>
<div class="asset-body"><span class="asset-name">书斋器物 · VRM 附件包</span><span class="asset-sub">临江仙 · v2 · 售出 58</span>
<div style="display:flex;align-items:center;justify-content:space-between;margin-top:2px"><span class="price">¥18.00</span><span class="mem-type">个人用</span></div>
</div>
</div>
<div class="asset-card">
<div class="asset-thumb" style="background:linear-gradient(150deg,#413045,#8a6a95 60%,#503c55)"><span class="glyph">谱</span><span class="asset-type">插件</span></div>
<div class="asset-body"><span class="asset-name">曲谱排版 · 插件</span><span class="asset-sub">百工 · v1.4 · 售出 233</span>
<div style="display:flex;align-items:center;justify-content:space-between;margin-top:2px"><span class="price">¥6.00</span><span class="mem-type">个人用</span></div>
</div>
</div>
</div>
</section>
<section class="section" id="license">
<div class="section__head"><span class="cn">市契<span class="cn__plain">商品许可 · 以「雾中茶寮 v3」为例</span></span></div>
<div class="card">
<div class="table-wrap"><table class="data">
<thead><tr><th>项目</th><th>内容</th></tr></thead>
<tbody>
<tr><td>许可范围</td><td>商用(衍生作品可售,须保留署名;不可单独转售原始文件)</td></tr>
<tr><td>交付物</td><td>世界文档 42 页 · 地图 PSD · 场景音效 12 段 · 更新至 v3.x</td></tr>
<tr><td>退契规则</td><td>14 天内未下载可全额退款;下载后遵循许可,重大缺陷另行处理</td></tr>
<tr><td>价格构成</td><td>¥28.00 = 创作者分润 ¥23.80(85%)+ 平台费 ¥4.20(15%)· 税按地区另计</td></tr>
<tr><td>地区可售</td><td>当前地区可售 · 跨区价格与税务见结算页</td></tr>
</tbody>
</table></div>
<div style="display:flex;gap:10px;margin-top:14px;align-items:center">
<button class="btn btn--cinnabar">购买 · ¥28.00</button>
<button class="btn btn--outline">加入购物车</button>
<span style="font-size:12px;color:var(--text-3)">支付经 Idempotency-Key 幂等 · 重复点击不会重复扣款</span>
</div>
</div>
</section>
<section class="section card">
<div class="card__head"><span class="cn">结算<span class="cn__plain">创作者收益</span></span><a class="more" href="settings.html">结算设置 →</a></div>
<div style="display:flex;gap:28px;flex-wrap:wrap;align-items:center">
<div><div style="font-size:11.5px;color:var(--text-3)">可结算余额</div><div class="price" style="font-size:22px">¥1,240.50</div></div>
<div><div style="font-size:11.5px;color:var(--text-3)">本月分润</div><div class="price" style="font-size:22px">¥318.20</div></div>
<div><div style="font-size:11.5px;color:var(--text-3)">上次结算批次</div><div style="font-size:14px">09-10 · 已付 ¥986.30</div></div>
<div style="margin-left:auto;display:flex;gap:10px">
<button class="btn btn--outline btn--sm">下载对账单</button>
<button class="btn btn--primary btn--sm">申请结算</button>
</div>
</div>
<p style="font-size:12px;color:var(--text-3);margin-top:10px">Ledger 不可变,修正写反向分录;每日自动对账(支付 / 订单 / Ledger / 结算四账核对)。</p>
</section>
</div>
</main>
</div>
<script src="assets/app.js?v=3"></script>
</body>
</html>
+242
View File
@@ -0,0 +1,242 @@
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>息壤 · 记忆与知识 — 魂镜 Hunjing</title>
<link rel="stylesheet" href="assets/app.css?v=10">
</head>
<body>
<svg style="display:none" aria-hidden="true">
<symbol id="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></symbol>
<symbol id="i-home" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="M9 22V12h6v10"/></symbol>
<symbol id="i-branch" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="6" y1="3" x2="6" y2="15"/><circle cx="18" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/></symbol>
<symbol id="i-book" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></symbol>
<symbol id="i-user" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></symbol>
<symbol id="i-layers" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"/><polyline points="2 17 12 22 22 17"/><polyline points="2 12 12 17 22 12"/></symbol>
<symbol id="i-kanban" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3h4v18H5z"/><path d="M10 3h4v12h-4z"/><path d="M15 3h4v8h-4z"/></symbol>
<symbol id="i-package" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></symbol>
<symbol id="i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></symbol>
<symbol id="i-route" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="19" r="3"/><circle cx="18" cy="5" r="3"/><path d="M12 19h4.5a3.5 3.5 0 0 0 0-7h-9a3.5 3.5 0 0 1 0-7H12"/></symbol>
<symbol id="i-globe" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></symbol>
<symbol id="i-bag" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 0 1-8 0"/></symbol>
<symbol id="i-shield" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></symbol>
<symbol id="i-monitor" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></symbol>
<symbol id="i-sliders" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></symbol>
<symbol id="i-search" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></symbol>
<symbol id="i-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></symbol>
<symbol id="i-clock" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></symbol>
<symbol id="i-quote" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z"/><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z"/></symbol>
<symbol id="i-chevrons" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="11 17 6 12 11 7"/><polyline points="18 17 13 12 18 7"/></symbol>
</svg>
<div class="app">
<aside class="sidebar">
<div class="brand">
<div class="brand__mark" aria-hidden="true"></div>
<div class="brand__text">
<div class="brand__name">魂镜</div>
<div class="brand__sub">Hunjing</div>
</div>
</div>
<nav class="side-nav" aria-label="主导航">
<div class="nav-group">
<div class="nav-group__title">常用</div>
<a class="nav-item" href="home.html"><svg><use href="#i-home"/></svg><span class="cn">镜庭</span><span class="nav-plain">首页</span></a>
<a class="nav-item" href="conversation.html"><svg><use href="#i-branch"/></svg><span class="cn">镜树</span><span class="nav-plain">对话</span></a>
<a class="nav-item" href="characters.html"><svg><use href="#i-user"/></svg><span class="cn">镜生</span><span class="nav-plain">角色</span></a>
<a class="nav-item is-active" href="memory.html" aria-current="page"><svg><use href="#i-book"/></svg><span class="cn">息壤</span><span class="nav-plain">记忆</span></a>
<a class="nav-item" href="avatar.html"><svg><use href="#i-layers"/></svg><span class="cn">形仪</span><span class="nav-plain">形象</span></a>
</div>
<div class="nav-group">
<div class="nav-group__title">创造</div>
<a class="nav-item" href="agent-workspace.html"><svg><use href="#i-kanban"/></svg><span class="cn">天工阁</span><span class="nav-plain">任务</span></a>
<a class="nav-item" href="plugins.html"><svg><use href="#i-package"/></svg><span class="cn">百工坊</span><span class="nav-plain">插件</span></a>
<a class="nav-item" href="collaboration.html"><svg><use href="#i-users"/></svg><span class="cn">同契台</span><span class="nav-plain">协作</span></a>
<a class="nav-item" href="model-gateway.html"><svg><use href="#i-route"/></svg><span class="cn">神识阁</span><span class="nav-plain">模型</span></a>
</div>
<div class="nav-group">
<div class="nav-group__title">世界</div>
<a class="nav-item" href="community.html"><svg><use href="#i-globe"/></svg><span class="cn">雅集</span><span class="nav-plain">社区</span></a>
<a class="nav-item" href="marketplace.html"><svg><use href="#i-bag"/></svg><span class="cn">云市</span><span class="nav-plain">市场</span></a>
</div>
<div class="nav-group">
<div class="nav-group__title">治理与账户</div>
<a class="nav-item" href="governance.html"><svg><use href="#i-shield"/></svg><span class="cn">司命台</span><span class="nav-plain">治理</span></a>
<a class="nav-item" href="devices.html"><svg><use href="#i-monitor"/></svg><span class="cn">器谱</span><span class="nav-plain">设备</span></a>
<a class="nav-item" href="settings.html"><svg><use href="#i-sliders"/></svg><span class="cn">设置</span><span class="nav-plain">账户</span></a>
</div>
</nav>
<div class="side-foot">
<button class="icon-btn side-fold-btn" data-sidebar-fold aria-label="收起侧栏" title="收起 / 展开侧栏(记忆偏好)"><svg><use href="#i-chevrons"/></svg></button>
<span class="avatar avatar--sm avatar--user">舟</span>
<span style="font-size:12.5px">云舟</span>
<button class="icon-btn" data-theme-toggle style="margin-left:auto" aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</div>
</aside>
<main class="main">
<header class="topbar">
<div class="crumbs"><span class="cn">息壤</span><span class="crumbs__sep">·</span><span class="here">记忆与知识</span></div>
<div class="topbar__spacer"></div>
<span class="prototype-tag">静态原型 · 待审查</span>
<button class="icon-btn" data-theme-toggle aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</header>
<div class="content">
<div style="display:flex;gap:12px;align-items:center;margin-bottom:18px;flex-wrap:wrap">
<div class="chips" style="margin-bottom:0">
<button class="chip is-on">全部 · 132</button>
<button class="chip">青梧 · 98</button>
<button class="chip">雪袖 · 22</button>
<button class="chip">观澜 · 12</button>
</div>
<div class="searchbar" style="flex:1;min-width:220px">
<svg><use href="#i-search"/></svg>
<input type="search" placeholder="检索记忆:关键词 / 语义 / 结构化(授权预过滤后检索)" aria-label="检索记忆">
</div>
</div>
<div class="tabs" role="tablist" aria-label="记忆类型">
<button class="tab is-on" role="tab" aria-selected="true">候选审阅 <span class="cnt">3</span></button>
<button class="tab" role="tab" aria-selected="false">明忆 <span class="cnt">128</span></button>
<button class="tab" role="tab" aria-selected="false">重忆 <span class="cnt">4</span></button>
<button class="tab" role="tab" aria-selected="false">世谱 <span class="cnt">17</span></button>
<button class="tab" role="tab" aria-selected="false">玄络</button>
</div>
<div class="realm-banner" role="note">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></svg>
归真的约束:候选经你确认才会影响未来上下文;对话中的归真不自动写入所有长期记忆。境界内容只成世界知识候选,幻境内容须手动入忆并标注性质。
</div>
<!-- 候选 1:低敏感偏好 -->
<div class="card" style="margin-bottom:14px">
<div class="card__head">
<span class="mem-type">偏好 preference</span>
<span style="font-size:11.5px;color:var(--text-3)">来源 · 镜树对话 <span class="mono">m_91d0</span> · extractor v5</span>
<span style="margin-left:auto;font-size:11.5px;color:var(--text-3)">置信 0.92 · 敏感度低 · 青梧</span>
</div>
<p style="font-size:14px" class="cn">「读书会隔周四 19:30 举行,每次 90 分钟。」</p>
<div style="display:flex;gap:8px;margin-top:12px;flex-wrap:wrap">
<button class="btn btn--primary btn--sm"><svg><use href="#i-check"/></svg>归真入忆</button>
<button class="btn btn--outline btn--sm">正影 · 纠正后入忆</button>
<button class="btn btn--ghost btn--sm">忽略</button>
<a class="btn btn--ghost btn--sm" href="conversation.html"><svg><use href="#i-quote"/></svg>查看来源上下文</a>
</div>
</div>
<!-- 候选 2:大周天来源 -->
<div class="card" style="margin-bottom:14px">
<div class="card__head">
<span class="mem-type">事实 fact</span>
<span class="badge badge--info"><span class="badge__dot"></span>大周天 · 第 7 轮提议</span>
<span style="margin-left:auto;font-size:11.5px;color:var(--text-3)">置信 0.71 · 敏感度低 · 青梧</span>
</div>
<p style="font-size:14px" class="cn">「云舟在共读选篇时倾向短篇,超过 1500 字的篇目完成率明显下降。」</p>
<p style="font-size:12px;color:var(--text-3);margin-top:6px">由 42 次小周天完成信号的回顾阶段产生 · 复用同一审核流 · 可追溯本轮输入</p>
<div style="display:flex;gap:8px;margin-top:12px;flex-wrap:wrap">
<button class="btn btn--primary btn--sm"><svg><use href="#i-check"/></svg>归真入忆</button>
<button class="btn btn--outline btn--sm">正影 · 纠正后入忆</button>
<button class="btn btn--ghost btn--sm">忽略</button>
<a class="btn btn--ghost btn--sm" href="characters.html">查看大周天第 7 轮</a>
</div>
</div>
<!-- 候选 3:中敏感关系 → 重忆 -->
<div class="card" style="margin-bottom:14px;border-color:color-mix(in srgb,var(--warn) 35%,transparent)">
<div class="card__head">
<span class="mem-type">关系 relationship</span>
<span class="badge badge--warn"><span class="badge__dot"></span>建议作重忆保存</span>
<span style="margin-left:auto;font-size:11.5px;color:var(--text-3)">置信 0.68 · 敏感度中 · 青梧</span>
</div>
<p style="font-size:14px" class="cn">「云舟近期在工作日晚上更希望被倾听,而不是立刻获得建议。」</p>
<p style="font-size:12px;color:var(--text-3);margin-top:6px">重忆 · 敏感或高影响记忆:归真后仅在明确允许时进入上下文,可随时正影纠正或归档,版本不可变。</p>
<div style="display:flex;gap:8px;margin-top:12px;flex-wrap:wrap">
<button class="btn btn--primary btn--sm"><svg><use href="#i-check"/></svg>归真为重忆</button>
<button class="btn btn--outline btn--sm">正影 · 纠正后入忆</button>
<button class="btn btn--ghost btn--sm">忽略</button>
<a class="btn btn--ghost btn--sm" href="conversation.html"><svg><use href="#i-quote"/></svg>查看来源上下文</a>
</div>
</div>
<!-- 最近归真 -->
<section class="section" style="margin-top:28px">
<div class="section__head">
<span class="cn">最近归真<span class="cn__plain">已生效的明忆</span></span>
<span class="more" style="color:var(--text-3);cursor:default">全部 128 条 · 见下方列表</span>
</div>
<div class="card" style="padding:6px 18px">
<div class="list-row">
<span class="mem-type" style="flex:none">偏好</span>
<div class="list-row__body">
<div class="list-row__title cn">「云舟不喜长篇说教,笔记以要点为先。」</div>
<div class="list-row__sub">青梧 · v3(正影自 v2)· 来源:手动 · 有效期长期 · ETag 并发受控</div>
</div>
<button class="btn btn--ghost btn--sm">正影</button>
<button class="btn btn--ghost btn--sm">归档</button>
</div>
<div class="list-row">
<span class="mem-type" style="flex:none">事实</span>
<div class="list-row__body">
<div class="list-row__title cn">「3 月购入《陶庵梦忆》校注本(中华书局)。」</div>
<div class="list-row__sub">青梧 · v1 · 来源:对话 · 实录</div>
</div>
<button class="btn btn--ghost btn--sm">正影</button>
<button class="btn btn--ghost btn--sm">归档</button>
</div>
<div class="list-row">
<span class="mem-type" style="flex:none">事件</span>
<div class="list-row__body">
<div class="list-row__title cn">「读书会成立于 2024-03,成员 6 人。」</div>
<div class="list-row__sub">青梧 · v1 · 来源:世谱引用 · 删除将传播到向量与图投影</div>
</div>
<button class="btn btn--ghost btn--sm">正影</button>
<button class="btn btn--ghost btn--sm">归档</button>
</div>
</div>
<p style="font-size:12px;color:var(--text-3);margin-top:10px">MemoryVersion 不可变:纠正与取代都写新版本,旧版本保留可查;删除建墓碑且传播到索引、缓存与派生数据,墓碑不保存原文。</p>
</section>
<!-- 玄络预览 -->
<section class="section">
<div class="section__head">
<span class="cn">玄络<span class="cn__plain">关系图谱投影 · 可重建</span></span>
<span class="more" style="color:var(--text-3);cursor:default">玄络 · 可交互图谱在 React 阶段实现</span>
</div>
<div class="card graph-box">
<svg viewBox="0 0 760 190" style="width:100%;height:auto" role="img" aria-label="玄络示意:云舟与青梧、读书会、张岱作品、雪袖的关系图">
<g font-size="12" font-family="inherit">
<line x1="380" y1="95" x2="200" y2="45" stroke="var(--line)" stroke-width="1.2"/>
<line x1="380" y1="95" x2="560" y2="45" stroke="var(--line)" stroke-width="1.2"/>
<line x1="380" y1="95" x2="180" y2="150" stroke="var(--line)" stroke-width="1.2"/>
<line x1="380" y1="95" x2="590" y2="150" stroke="var(--line)" stroke-width="1.2"/>
<line class="tent-edge" x1="560" y1="45" x2="590" y2="150" stroke="var(--cinnabar)" stroke-width="1.4" stroke-dasharray="5 5"/>
<circle cx="380" cy="95" r="26" fill="var(--accent)" fill-opacity=".18" stroke="var(--accent)"/>
<text x="380" y="99" text-anchor="middle" fill="var(--text-1)" font-weight="600">云舟</text>
<circle cx="200" cy="45" r="26" fill="var(--bg-raised)" stroke="var(--line)"/>
<text x="200" y="49" text-anchor="middle" fill="var(--text-1)">青梧</text>
<circle cx="560" cy="45" r="26" fill="var(--bg-raised)" stroke="var(--line)"/>
<text x="560" y="49" text-anchor="middle" fill="var(--text-1)">雪袖</text>
<circle cx="180" cy="150" r="30" fill="var(--bg-raised)" stroke="var(--line)"/>
<text x="180" y="147" text-anchor="middle" fill="var(--text-2)">读书会</text>
<text x="180" y="161" text-anchor="middle" fill="var(--text-2)" font-size="10">世谱</text>
<circle cx="590" cy="150" r="30" fill="var(--bg-raised)" stroke="var(--line)"/>
<text x="590" y="147" text-anchor="middle" fill="var(--text-2)">陶庵梦忆</text>
<text x="590" y="161" text-anchor="middle" fill="var(--text-2)" font-size="10">世界知识</text>
<text x="300" y="62" text-anchor="middle" fill="var(--text-2)" font-size="10.5">缘契 · 共读者 v4</text>
<text x="472" y="62" text-anchor="middle" fill="var(--text-2)" font-size="10.5">缘契 · 茶友 v1</text>
<text x="268" y="133" text-anchor="middle" fill="var(--text-2)" font-size="10.5">成员 · 发起人</text>
<text x="496" y="133" text-anchor="middle" fill="var(--text-2)" font-size="10.5">正在共读</text>
<text x="594" y="103" text-anchor="middle" fill="var(--cinnabar)" font-size="10">待验</text>
</g>
</svg>
</div>
<p style="font-size:12px;color:var(--text-3);margin-top:10px">玄络是可重建投影:删除与权限变化随宿主重建;跨用户、跨角色召回恒为 0(fail-closed 已验证)。</p>
</section>
</div>
</main>
</div>
<script src="assets/app.js?v=3"></script>
</body>
</html>
+124
View File
@@ -0,0 +1,124 @@
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>神识阁 · 模型与路由 — 魂镜 Hunjing</title>
<link rel="stylesheet" href="assets/app.css?v=10">
</head>
<body>
<svg style="display:none" aria-hidden="true"><symbol id="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></symbol><symbol id="i-home" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="M9 22V12h6v10"/></symbol><symbol id="i-branch" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="6" y1="3" x2="6" y2="15"/><circle cx="18" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/></symbol><symbol id="i-user" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></symbol><symbol id="i-book" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></symbol><symbol id="i-layers" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"/><polyline points="2 17 12 22 22 17"/><polyline points="2 12 12 17 22 12"/></symbol><symbol id="i-kanban" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3h4v18H5z"/><path d="M10 3h4v12h-4z"/><path d="M15 3h4v8h-4z"/></symbol><symbol id="i-package" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></symbol><symbol id="i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></symbol><symbol id="i-route" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="19" r="3"/><circle cx="18" cy="5" r="3"/><path d="M12 19h4.5a3.5 3.5 0 0 0 0-7h-9a3.5 3.5 0 0 1 0-7H12"/></symbol><symbol id="i-globe" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></symbol><symbol id="i-bag" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 0 1-8 0"/></symbol><symbol id="i-shield" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></symbol><symbol id="i-monitor" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></symbol><symbol id="i-sliders" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></symbol><symbol id="i-key" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4"/></symbol><symbol id="i-clock" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></symbol><symbol id="i-plus" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></symbol><symbol id="i-check" vieLine truncated
</svg>
<div class="app">
<aside class="sidebar">
<div class="brand">
<div class="brand__mark" aria-hidden="true"></div>
<div class="brand__text">
<div class="brand__name">魂镜</div>
<div class="brand__sub">Hunjing</div>
</div>
</div>
<nav class="side-nav" aria-label="主导航"><div class="nav-group"><div class="nav-group__title">常用</div><a class="nav-item" href="home.html"><svg><use href="#i-home"/></svg><span class="cn">镜庭</span><span class="nav-plain">首页</span></a><a class="nav-item" href="conversation.html"><svg><use href="#i-branch"/></svg><span class="cn">镜树</span><span class="nav-plain">对话</span></a><a class="nav-item" href="characters.html"><svg><use href="#i-user"/></svg><span class="cn">镜生</span><span class="nav-plain">角色</span></a><a class="nav-item" href="memory.html"><svg><use href="#i-book"/></svg><span class="cn">息壤</span><span class="nav-plain">记忆</span></a><a class="nav-item" href="avatar.html"><svg><use href="#i-layers"/></svg><span class="cn">形仪</span><span class="nav-plain">形象</span></a></div><div class="nav-group"><div class="nav-group__title">创造</div><a class="nav-item" href="agent-workspace.html"><svg><use href="#i-kanban"/></svg><span class="cn">天工阁</span><span class="nav-plain">任务</span></a><a class="nav-item" href="plugins.html"><svg><use href="#i-package"/></svg><span class="cn">百工坊</span><span class="nav-plain">插件</span></a><a class="nav-item" href="collaboration.html"><svg><use href="#i-users"/></svg><span class="cn">同契台</span><span class="nav-plain">协作</span></a><a class="nav-item is-active" aria-current="page" href="model-gateway.html"><svg><use href="#i-route"/></svg><span class="cn">神识阁</span><span class="nav-plain">模型</span></a></div><div class="nav-group"><div class="nav-group__title">世界</div><a class="nav-item" href="community.html"><svg><use href="#i-globe"/></svg><span class="cn">雅集</span><span class="nav-plain">社区</span></a><a class="nav-item" href="marketplace.html"><svg><use href="#i-bag"/></svg><span class="cn">云市</span><span class="nav-plain">市场</span></a></div><div class="nav-group"><div class="nav-group__title">治理与账户</div><a class="nav-item" href="governance.html"><svg><use href="#i-shield"/></svg><span class="cn">司命台</span><span class="nav-plain">治理</span></a><a class="nav-item" href="devices.html"><svg><use href="#i-monitor"/></svg><span class="cn">器谱</span><span class="nav-plain">设备</span></a><a class="nav-item" href="settings.html"><svg><use href="#i-sliders"/></svg><span class="cn">设置</span><span class="nav-plain">账户</span></a></div></nav>
<div class="side-foot">
<button class="icon-btn side-fold-btn" data-sidebar-fold aria-label="收起侧栏" title="收起 / 展开侧栏(记忆偏好)"><svg><use href="#i-chevrons"/></svg></button>
<span class="avatar avatar--sm avatar--user">舟</span>
<span style="font-size:12.5px">云舟</span>
<button class="icon-btn" data-theme-toggle style="margin-left:auto" aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</div>
</aside>
<main class="main">
<header class="topbar">
<div class="crumbs"><span class="cn">神识阁</span><span class="crumbs__sep">·</span><span class="here">模型与路由</span></div>
<div class="topbar__spacer"></div>
<span class="prototype-tag">静态原型 · 待审查</span>
<button class="icon-btn" data-theme-toggle aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</header>
<div class="content">
<div class="realm-banner" role="note">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
神识是角色的可替换推理能力,不等于角色身份或意识证明。首个可见输出后不切换 Provider;引擎缺失时拒绝执行(fail closed)。
</div>
<section class="section">
<div class="section__head"><span class="cn">逻辑模型<span class="cn__plain">能力目录</span></span><span class="more" style="color:var(--text-3);cursor:default">全部 9 个 · 列表即目录</span></div>
<div class="grid-cards">
<div class="card" style="gap:8px;display:flex;flex-direction:column">
<div style="display:flex;align-items:center;gap:8px"><b style="font-family:var(--font-serif);font-size:15px">沉潜 · 深思</b><span class="badge badge--ok" style="margin-left:auto"><span class="badge__dot"></span>可用</span></div>
<div style="font-size:12px;color:var(--text-3)">推理 · 128k 上下文 · 函数调用</div>
<div style="font-size:12.5px;color:var(--text-2)">¥12.00 / ¥48.00<small style="color:var(--text-3)"> 每 1M token(入/出)</small></div>
<div style="font-size:11.5px;color:var(--text-3)">价格快照 v2026-09-01 · 2 个 Endpoint · 故障转移已配置</div>
</div>
<div class="card" style="gap:8px;display:flex;flex-direction:column">
<div style="display:flex;align-items:center;gap:8px"><b style="font-family:var(--font-serif);font-size:15px">惊鸿 · 快速</b><span class="badge badge--ok" style="margin-left:auto"><span class="badge__dot"></span>可用</span></div>
<div style="font-size:12px;color:var(--text-3)">轻量 · 32k · 视觉</div>
<div style="font-size:12.5px;color:var(--text-2)">¥1.60 / ¥6.40<small style="color:var(--text-3)"> 每 1M token</small></div>
<div style="font-size:11.5px;color:var(--text-3)">会话临时选择的默认候选</div>
</div>
<div class="card" style="gap:8px;display:flex;flex-direction:column">
<div style="display:flex;align-items:center;gap:8px"><b style="font-family:var(--font-serif);font-size:15px">丹青 · 图像</b><span class="badge badge--warn" style="margin-left:auto"><span class="badge__dot"></span>降级中</span></div>
<div style="font-size:12px;color:var(--text-3)">文生图 / 图生图 · 角色一致性</div>
<div style="font-size:12.5px;color:var(--text-2)">¥0.24<small style="color:var(--text-3)"> / 张</small></div>
<div style="font-size:11.5px;color:var(--text-3)">主 Endpoint 限流 · 已切备用 · 新任务排队 ≤ 2 分钟</div>
</div>
</div>
</section>
<section class="section card">
<div class="card__head"><span class="cn">路由继承链<span class="cn__plain">上层不可被下层覆盖</span></span></div>
<div style="display:flex;flex-direction:column;gap:0">
<div class="set-row"><div class="set-row__body"><div class="set-row__t">① 平台硬边界</div><div class="set-row__d">禁用模型与绝对上限,任何下层不可逾越</div></div><span class="badge badge--ok"><span class="badge__dot"></span>生效</span></div>
<div class="set-row"><div class="set-row__body"><div class="set-row__t">② 平台目录</div><div class="set-row__d">默认逻辑模型与价格快照</div></div><span class="badge badge--ok"><span class="badge__dot"></span>生效</span></div>
<div class="set-row"><div class="set-row__body"><div class="set-row__t">③ 用户偏好 / BYOK</div><div class="set-row__d">你的默认模型与自带密钥</div></div><span class="badge badge--ok"><span class="badge__dot"></span>生效</span></div>
<div class="set-row"><div class="set-row__body"><div class="set-row__t">④ 角色覆写</div><div class="set-row__d">青梧未设置覆写</div></div><span class="badge badge--muted"><span class="badge__dot"></span>未设置</span></div>
<div class="set-row" style="background:var(--accent-soft);border-radius:var(--radius-sm);padding-left:12px;padding-right:12px"><div class="set-row__body"><div class="set-row__t">⑤ 会话临时选择 <span class="cn__plain">当前生效</span></div><div class="set-row__d">镜树「共读选篇」选择了 惊鸿 · 快速</div></div><span class="badge badge--info"><span class="badge__dot"></span>生效 <span class="mono">session</span></span></div>
</div>
</section>
<div class="two-col">
<section class="section card">
<div class="card__head"><span class="cn">BYOK<span class="cn__plain">自带模型密钥</span></span><button class="btn btn--outline btn--sm" style="margin-left:auto"><svg><use href="#i-plus"/></svg>添加密钥</button></div>
<div class="set-row">
<svg style="width:16px;height:16px;color:var(--text-3)"><use href="#i-key"/></svg>
<div class="set-row__body"><div class="set-row__t mono">byok_a31f…(神思 Provider)</div><div class="set-row__d">2026-08-12 添加 · 存于系统 Keychain · 不写配置与日志</div></div>
<button class="btn btn--ghost btn--sm">轮换</button>
</div>
<div class="set-row">
<svg style="width:16px;height:16px;color:var(--text-3)"><use href="#i-key"/></svg>
<div class="set-row__body"><div class="set-row__t mono">byok_7c02…(图像 Provider)</div><div class="set-row__d">2026-09-01 添加 · 仅丹青 · 图像使用</div></div>
<button class="btn btn--ghost btn--sm">轮换</button>
</div>
<p style="font-size:12px;color:var(--text-3);margin-top:10px">BYOK 调用按实际用量计费一次,不重复计费(ADR-021);凭据只经 Header 传递,永不转发至上游之外的日志。</p>
</section>
<section class="section card">
<div class="card__head"><span class="cn">本月用量<span class="cn__plain">9 月 1–15 日</span></span><span class="more" style="color:var(--text-3);cursor:default">明细 · Run 级观测见司命台诊断</span></div>
<div class="bars" role="img" aria-label="近七日 token 用量条形图:周三最高 8.4 万">
<div class="bars__col"><div class="bars__bar" style="height:42%"></div><span class="bars__label">一</span></div>
<div class="bars__col"><div class="bars__bar" style="height:55%"></div><span class="bars__label">二</span></div>
<div class="bars__col"><div class="bars__bar" style="height:96%"></div><span class="bars__label">三</span></div>
<div class="bars__col"><div class="bars__bar" style="height:48%"></div><span class="bars__label">四</span></div>
<div class="bars__col"><div class="bars__bar" style="height:30%"></div><span class="bars__label">五</span></div>
<div class="bars__col"><div class="bars__bar" style="height:22%"></div><span class="bars__label">六</span></div>
<div class="bars__col"><div class="bars__bar" style="height:36%"></div><span class="bars__label">日</span></div>
</div>
<div class="table-wrap" style="margin-top:14px"><table class="data">
<thead><tr><th>指标</th><th>数值</th></tr></thead>
<tbody>
<tr><td>Token(入/出)</td><td class="mono">486k / 212k</td></tr>
<tr><td>Prompt Cache 命中</td><td class="mono">31%</td></tr>
<tr><td>P95 TTFT</td><td class="mono">1.4s</td></tr>
<tr><td>费用</td><td class="mono">¥18.64</td></tr>
<tr><td>错误 / 重试</td><td class="mono">2 / 1</td></tr>
<tr><td>未知 usage 记录</td><td class="mono">null(不猜测)</td></tr>
</tbody>
</table></div>
</section>
</div>
</div>
</main>
</div>
<script src="assets/app.js?v=3"></script>
</body>
</html>
+115
View File
@@ -0,0 +1,115 @@
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>百工坊 · 插件与能力 — 魂镜 Hunjing</title>
<link rel="stylesheet" href="assets/app.css?v=10">
</head>
<body>
<svg style="display:none" aria-hidden="true"><symbol id="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></symbol><symbol id="i-home" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="M9 22V12h6v10"/></symbol><symbol id="i-branch" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="6" y1="3" x2="6" y2="15"/><circle cx="18" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/></symbol><symbol id="i-user" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></symbol><symbol id="i-book" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></symbol><symbol id="i-layers" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"/><polyline points="2 17 12 22 22 17"/><polyline points="2 12 12 17 22 12"/></symbol><symbol id="i-kanban" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3h4v18H5z"/><path d="M10 3h4v12h-4z"/><path d="M15 3h4v8h-4z"/></symbol><symbol id="i-package" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></symbol><symbol id="i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></symbol><symbol id="i-route" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="19" r="3"/><circle cx="18" cy="5" r="3"/><path d="M12 19h4.5a3.5 3.5 0 0 0 0-7h-9a3.5 3.5 0 0 1 0-7H12"/></symbol><symbol id="i-globe" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></symbol><symbol id="i-bag" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 0 1-8 0"/></symbol><symbol id="i-shield" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></symbol><symbol id="i-monitor" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></symbol><symbol id="i-sliders" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></symbol><symbol id="i-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></symbol><symbol id="i-x" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></symbol><symbol id="i-refresh" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"/><path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"/></symbol><symbol id="i-clock" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecapLine truncated
</svg>
<div class="app">
<aside class="sidebar">
<div class="brand">
<div class="brand__mark" aria-hidden="true"></div>
<div class="brand__text">
<div class="brand__name">魂镜</div>
<div class="brand__sub">Hunjing</div>
</div>
</div>
<nav class="side-nav" aria-label="主导航"><div class="nav-group"><div class="nav-group__title">常用</div><a class="nav-item" href="home.html"><svg><use href="#i-home"/></svg><span class="cn">镜庭</span><span class="nav-plain">首页</span></a><a class="nav-item" href="conversation.html"><svg><use href="#i-branch"/></svg><span class="cn">镜树</span><span class="nav-plain">对话</span></a><a class="nav-item" href="characters.html"><svg><use href="#i-user"/></svg><span class="cn">镜生</span><span class="nav-plain">角色</span></a><a class="nav-item" href="memory.html"><svg><use href="#i-book"/></svg><span class="cn">息壤</span><span class="nav-plain">记忆</span></a><a class="nav-item" href="avatar.html"><svg><use href="#i-layers"/></svg><span class="cn">形仪</span><span class="nav-plain">形象</span></a></div><div class="nav-group"><div class="nav-group__title">创造</div><a class="nav-item" href="agent-workspace.html"><svg><use href="#i-kanban"/></svg><span class="cn">天工阁</span><span class="nav-plain">任务</span></a><a class="nav-item is-active" aria-current="page" href="plugins.html"><svg><use href="#i-package"/></svg><span class="cn">百工坊</span><span class="nav-plain">插件</span></a><a class="nav-item" href="collaboration.html"><svg><use href="#i-users"/></svg><span class="cn">同契台</span><span class="nav-plain">协作</span></a><a class="nav-item" href="model-gateway.html"><svg><use href="#i-route"/></svg><span class="cn">神识阁</span><span class="nav-plain">模型</span></a></div><div class="nav-group"><div class="nav-group__title">世界</div><a class="nav-item" href="community.html"><svg><use href="#i-globe"/></svg><span class="cn">雅集</span><span class="nav-plain">社区</span></a><a class="nav-item" href="marketplace.html"><svg><use href="#i-bag"/></svg><span class="cn">云市</span><span class="nav-plain">市场</span></a></div><div class="nav-group"><div class="nav-group__title">治理与账户</div><a class="nav-item" href="governance.html"><svg><use href="#i-shield"/></svg><span class="cn">司命台</span><span class="nav-plain">治理</span></a><a class="nav-item" href="devices.html"><svg><use href="#i-monitor"/></svg><span class="cn">器谱</span><span class="nav-plain">设备</span></a><a class="nav-item" href="settings.html"><svg><use href="#i-sliders"/></svg><span class="cn">设置</span><span class="nav-plain">账户</span></a></div></nav>
<div class="side-foot">
<button class="icon-btn side-fold-btn" data-sidebar-fold aria-label="收起侧栏" title="收起 / 展开侧栏(记忆偏好)"><svg><use href="#i-chevrons"/></svg></button>
<span class="avatar avatar--sm avatar--user">舟</span>
<span style="font-size:12.5px">云舟</span>
<button class="icon-btn" data-theme-toggle style="margin-left:auto" aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</div>
</aside>
<main class="main">
<header class="topbar">
<div class="crumbs"><span class="cn">百工坊</span><span class="crumbs__sep">·</span><span class="here">插件与能力生态</span></div>
<div class="topbar__spacer"></div>
<span class="prototype-tag">静态原型 · 待审查</span>
<button class="icon-btn" data-theme-toggle aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</header>
<div class="content">
<div class="realm-banner" role="note">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
购买不等于安装,安装不等于启用,启用不等于授予新增权限。安全内核(认证、审批、交易账、审计)不可插件化。
</div>
<section class="section card">
<div class="card__head">
<span class="cn">沙箱<span class="cn__plain">隔离运行时</span></span>
<span class="badge badge--ok" style="margin-left:auto"><span class="badge__dot"></span>Worker 运转中 <span class="mono">sandbox:ok</span></span>
</div>
<p style="font-size:12.5px;color:var(--text-2)">本地代码插件运行于独立进程容器;声明式 / 远程插件默认受限。无符合策略的隔离后端时拒绝执行,不回退宿主(fail closed)。</p>
</section>
<section class="section">
<div class="section__head"><span class="cn">已安装<span class="cn__plain">4 个</span></span></div>
<div class="card" style="padding:6px 18px">
<div class="set-row">
<span class="badge badge--info" style="flex:none"><span class="badge__dot"></span>Core</span>
<div class="set-row__body"><div class="set-row__t">系统日历 <span class="cn__plain">bundled · 主进程</span></div><div class="set-row__d">仅 Core 插件可进主进程 · 权限:日历读写(每次请命)</div></div>
<span class="switch"><input type="checkbox" checked aria-label="系统日历已启用"><i></i></span>
</div>
<div class="set-row">
<span class="badge badge--muted" style="flex:none"><span class="badge__dot"></span>声明式</span>
<div class="set-row__body"><div class="set-row__t">笔记同步 <span class="cn__plain">受限运行时</span></div><div class="set-row__d">权限:笔记库 /读书会/ 读写 · 网络:无</div></div>
<span class="switch"><input type="checkbox" checked aria-label="笔记同步已启用"><i></i></span>
</div>
<div class="set-row" style="border-color:color-mix(in srgb,var(--warn) 35%,transparent)">
<span class="badge badge--warn" style="flex:none"><span class="badge__dot"></span>待更新</span>
<div class="set-row__body"><div class="set-row__t">性灵检索 <span class="cn__plain">远程 API</span></div><div class="set-row__d">v1.2 → v1.3 · 新增权限需重新确认(见下方)</div></div>
<button class="btn btn--outline btn--sm">查看变更</button>
</div>
<div class="set-row">
<span class="badge badge--muted" style="flex:none"><span class="badge__dot"></span>本地代码</span>
<div class="set-row__body"><div class="set-row__t">代码执行沙箱 <span class="cn__plain">独立容器 · 部署者信任</span></div><div class="set-row__d">Run 固定插件快照 · 活动运行不热替换</div></div>
<span class="switch"><input type="checkbox" checked aria-label="代码执行沙箱已启用"><i></i></span>
</div>
</div>
</section>
<section class="section">
<div class="section__head"><span class="cn">升级确认<span class="cn__plain">性灵检索 v1.3 新增权限</span></span></div>
<div class="block approval" style="max-width:640px">
<div class="approval__head">
<span class="approval__seal" aria-hidden="true">命</span>
<div>
<div class="approval__title"><span class="cn">请命</span><span class="cn__plain">升级新增权限必须重新确认</span></div>
<div style="font-size:11.5px;color:var(--text-3)">不确认则保留 v1.2,不影响现有使用</div>
</div>
</div>
<div class="approval__body">
<div class="fact"><span class="fact__k">现有 v1.2</span><span class="fact__v">读取笔记元数据 · 网络 api.xingling.app(只读)</span></div>
<div class="fact"><span class="fact__k">新增 v1.3</span><span class="fact__v" style="color:var(--cinnabar)">写入笔记内容 · 网络 api.xingling.app(读写)· 存储最近 20 条查询</span></div>
<div class="fact"><span class="fact__k">费用</span><span class="fact__v">免费插件 · 每次外部检索计费 ¥0.02</span></div>
<div class="fact"><span class="fact__k">撤架</span><span class="fact__v">安全撤架阻断新调用,保留历史审计</span></div>
</div>
<div class="approval__acts">
<button class="btn btn--cinnabar" aria-label="确认决定:允许更新">允许更新(朱批)</button>
<button class="btn btn--outline">保留 v1.2</button>
<span class="approval__note">工契 · 插件清单完整权限对比见详情。</span>
</div>
</div>
</section>
<section class="section">
<div class="section__head"><span class="cn">授契<span class="cn__plain">能力授予记录</span></span><a class="more" href="#">司命台完整审计 →</a></div>
<div class="card" style="padding:6px 18px">
<div class="list-row"><div class="list-row__body"><div class="list-row__title">日历写入 · 青梧</div><div class="list-row__sub">用途:共读事件 · 范围:仅指定事件 · 期限:单次 · 可随时撤销</div></div><button class="btn btn--ghost btn--sm">撤销</button></div>
<div class="list-row"><div class="list-row__body"><div class="list-row__title">笔记库读写 · 青梧</div><div class="list-row__sub">行契 · 30 天内同类免请命 · 剩余 12 天 · 超限后重新请命</div></div><button class="btn btn--ghost btn--sm">撤销</button></div>
<div class="list-row"><div class="list-row__body"><div class="list-row__title">网络检索 · 任务 Agent</div><div class="list-row__sub">用途:资料校对 · 白名单 3 域 · 期限:本 Run</div></div><span style="font-size:11.5px;color:var(--text-3)">随 Run 结束失效</span></div>
</div>
</section>
</div>
</main>
</div>
<script src="assets/app.js?v=3"></script>
</body>
</html>
+108
View File
@@ -0,0 +1,108 @@
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>魂镜 · 创建账户</title>
<link rel="stylesheet" href="assets/app.css?v=10">
</head>
<body>
<svg style="display:none" aria-hidden="true">
<symbol id="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></symbol>
</svg>
<div class="stage">
<div class="stage__bg" aria-hidden="true">
<div class="stage__rings">
<svg viewBox="0 0 800 800">
<defs><path id="ringpath" d="M400,400 m-300,0 a300,300 0 1,1 600,0 a300,300 0 1,1 -600,0"/></defs>
<circle class="ring-ink" cx="400" cy="400" r="392"/>
<circle class="ring-faint" cx="400" cy="400" r="336"/>
<g class="ring-slow"><circle class="ring-faint" cx="400" cy="400" r="272"/></g>
<circle class="ring-ink" cx="400" cy="400" r="206"/>
<circle class="ring-faint" cx="400" cy="400" r="158"/>
<g class="ring-slow" style="animation-direction:reverse"><circle class="ring-faint" cx="400" cy="400" r="104"/></g>
<text fill="var(--gilt-faint)" font-size="12" letter-spacing="6" style="font-family:var(--font-serif)">
<textPath href="#ringpath">幻由心生 · 镜随心转 · 一念起 · 万镜生 · 且向镜中看 · 那个是谁 ·</textPath>
</text>
</svg>
</div>
<svg style="position:absolute;inset:0;width:100%;height:100%;opacity:.035" aria-hidden="true"><filter id="grain"><feTurbulence type="fractalNoise" baseFrequency="0.8" numOctaves="2"/></filter><rect width="100%" height="100%" filter="url(#grain)"/></svg>
</div>
<header class="stage__topbar">
<a href="login.html" style="font-size:12px;color:var(--text-3)">← 返回登录</a>
<span style="font-size:12px;color:var(--text-3)">静态原型 · 待审查</span>
<span class="spacer"></span>
<a href="index.html" style="font-size:12px;color:var(--text-3)">原型目录</a>
<button class="icon-btn" data-theme-toggle aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</header>
<main class="stage__main">
<div class="mirror-card">
<div class="mirror-card__brand">
<div class="brand__mark" aria-hidden="true"></div>
<div>
<div style="font-family:var(--font-serif);font-size:20px;font-weight:600;line-height:1.2">魂镜</div>
<div style="font-size:11px;color:var(--text-3)">Hunjing</div>
</div>
</div>
<div class="mirror-card__title">
<h1>创建账户</h1>
</div>
<p class="mirror-card__sub">化名与法定身份分离核验;随时可导出、撤权或删除</p>
<form onsubmit="return false">
<div class="field-group">
<label for="reg-email">邮箱</label>
<input class="input" id="reg-email" type="email" autocomplete="email" placeholder="you@example.com">
</div>
<div class="field-group">
<label for="reg-code">验证码</label>
<div class="field-row">
<input class="input" id="reg-code" type="text" inputmode="numeric" placeholder="6 位验证码">
<button class="btn btn--outline" type="button">发送验证码</button>
</div>
</div>
<div class="field-group">
<label for="reg-pwd">密码</label>
<input class="input" id="reg-pwd" type="password" autocomplete="new-password" placeholder="至少 12 位,建议通行密钥">
</div>
<div class="field-group">
<label for="reg-pwd2">确认密码</label>
<input class="input" id="reg-pwd2" type="password" autocomplete="new-password" placeholder="再次输入">
</div>
<div style="margin:18px 0 16px;border-top:1px solid var(--line-soft);padding-top:16px">
<div style="font-size:12.5px;color:var(--text-2);margin-bottom:10px">开始前请知悉(数据权):</div>
<div class="check-row">
<input type="checkbox" id="ck-train" checked disabled aria-label="默认不用于模型训练">
<label class="t" for="ck-train"><b>默认不用于模型训练</b> —— 你的个人域数据默认不参与任何模型训练;自愿贡献是独立开关,可随时撤销。</label>
</div>
<div class="check-row">
<input type="checkbox" id="ck-export" checked disabled aria-label="可导出与删除">
<label class="t" for="ck-export"><b>可导出、可删除</b> —— 角色、记忆、对话与来源谱系随时可携导出;删除有冷静期并传播到全部派生数据。</label>
</div>
<div class="check-row">
<input type="checkbox" id="ck-vault" aria-label="了解私箧规则">
<label class="t" for="ck-vault"><b>私箧独立持钥</b> —— 加密私密区只有你能解开;平台无法恢复,钥匙丢失即永久不可读取。</label>
</div>
<div class="check-row">
<input type="checkbox" id="ck-terms" aria-label="同意服务条款">
<label class="t" for="ck-terms"><b>我已阅读并同意服务条款与社区规范</b> —— 角色不拥有生物意识或法律人格;社区有举报与治理机制。</label>
</div>
</div>
<a class="btn btn--cinnabar" href="login.html" style="width:100%">创建账户</a>
</form>
<p class="login-note">注册即创建你的镜域(个人数据域);角色、记忆与授权都归属镜域治理。</p>
<div class="login-foot">
已有账户?<a href="login.html">登入</a>
</div>
</div>
</main>
</div>
<script src="assets/app.js?v=3"></script>
</body>
</html>
+121
View File
@@ -0,0 +1,121 @@
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>设置 · 账户与偏好 — 魂镜 Hunjing</title>
<link rel="stylesheet" href="assets/app.css?v=10">
</head>
<body>
<svg style="display:none" aria-hidden="true"><symbol id="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></symbol><symbol id="i-home" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="M9 22V12h6v10"/></symbol><symbol id="i-branch" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="6" y1="3" x2="6" y2="15"/><circle cx="18" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/></symbol><symbol id="i-user" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></symbol><symbol id="i-book" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></symbol><symbol id="i-layers" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"/><polyline points="2 17 12 22 22 17"/><polyline points="2 12 12 17 22 12"/></symbol><symbol id="i-kanban" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3h4v18H5z"/><path d="M10 3h4v12h-4z"/><path d="M15 3h4v8h-4z"/></symbol><symbol id="i-package" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></symbol><symbol id="i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></symbol><symbol id="i-route" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="19" r="3"/><circle cx="18" cy="5" r="3"/><path d="M12 19h4.5a3.5 3.5 0 0 0 0-7h-9a3.5 3.5 0 0 1 0-7H12"/></symbol><symbol id="i-globe" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></symbol><symbol id="i-bag" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 0 1-8 0"/></symbol><symbol id="i-shield" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></symbol><symbol id="i-monitor" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></symbol><symbol id="i-sliders" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></symbol><symbol id="i-download" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></symbol><symbol id="i-trash" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"/><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/></symbol><symbol id="i-lock" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2"/><paLine truncated
</svg>
<div class="app">
<aside class="sidebar">
<div class="brand">
<div class="brand__mark" aria-hidden="true"></div>
<div class="brand__text">
<div class="brand__name">魂镜</div>
<div class="brand__sub">Hunjing</div>
</div>
</div>
<nav class="side-nav" aria-label="主导航"><div class="nav-group"><div class="nav-group__title">常用</div><a class="nav-item" href="home.html"><svg><use href="#i-home"/></svg><span class="cn">镜庭</span><span class="nav-plain">首页</span></a><a class="nav-item" href="conversation.html"><svg><use href="#i-branch"/></svg><span class="cn">镜树</span><span class="nav-plain">对话</span></a><a class="nav-item" href="characters.html"><svg><use href="#i-user"/></svg><span class="cn">镜生</span><span class="nav-plain">角色</span></a><a class="nav-item" href="memory.html"><svg><use href="#i-book"/></svg><span class="cn">息壤</span><span class="nav-plain">记忆</span></a><a class="nav-item" href="avatar.html"><svg><use href="#i-layers"/></svg><span class="cn">形仪</span><span class="nav-plain">形象</span></a></div><div class="nav-group"><div class="nav-group__title">创造</div><a class="nav-item" href="agent-workspace.html"><svg><use href="#i-kanban"/></svg><span class="cn">天工阁</span><span class="nav-plain">任务</span></a><a class="nav-item" href="plugins.html"><svg><use href="#i-package"/></svg><span class="cn">百工坊</span><span class="nav-plain">插件</span></a><a class="nav-item" href="collaboration.html"><svg><use href="#i-users"/></svg><span class="cn">同契台</span><span class="nav-plain">协作</span></a><a class="nav-item" href="model-gateway.html"><svg><use href="#i-route"/></svg><span class="cn">神识阁</span><span class="nav-plain">模型</span></a></div><div class="nav-group"><div class="nav-group__title">世界</div><a class="nav-item" href="community.html"><svg><use href="#i-globe"/></svg><span class="cn">雅集</span><span class="nav-plain">社区</span></a><a class="nav-item" href="marketplace.html"><svg><use href="#i-bag"/></svg><span class="cn">云市</span><span class="nav-plain">市场</span></a></div><div class="nav-group"><div class="nav-group__title">治理与账户</div><a class="nav-item" href="governance.html"><svg><use href="#i-shield"/></svg><span class="cn">司命台</span><span class="nav-plain">治理</span></a><a class="nav-item" href="devices.html"><svg><use href="#i-monitor"/></svg><span class="cn">器谱</span><span class="nav-plain">设备</span></a><a class="nav-item is-active" aria-current="page" href="settings.html"><svg><use href="#i-sliders"/></svg><span class="cn">设置</span><span class="nav-plain">账户</span></a></div></nav>
<div class="side-foot">
<button class="icon-btn side-fold-btn" data-sidebar-fold aria-label="收起侧栏" title="收起 / 展开侧栏(记忆偏好)"><svg><use href="#i-chevrons"/></svg></button>
<span class="avatar avatar--sm avatar--user">舟</span>
<span style="font-size:12.5px">云舟</span>
<button class="icon-btn" data-theme-toggle style="margin-left:auto" aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</div>
</aside>
<main class="main">
<header class="topbar">
<div class="crumbs"><span class="cn">设置</span><span class="crumbs__sep">·</span><span class="here">账户与偏好</span></div>
<div class="topbar__spacer"></div>
<span class="prototype-tag">静态原型 · 待审查</span>
<button class="icon-btn" data-theme-toggle aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
</header>
<div class="content">
<section class="section card">
<div class="card__head"><span class="cn">账户</span></div>
<div style="display:flex;gap:14px;align-items:center;flex-wrap:wrap">
<span class="avatar avatar--lg avatar--user">舟</span>
<div>
<div style="font-size:16px" class="cn">云舟<span class="cn__plain">前台化名 · 与法定身份分离核验</span></div>
<div style="font-size:12.5px;color:var(--text-3);margin-top:2px">yunzhou@example.com · OAuth 2.1 · Web 安全会话</div>
</div>
<div style="margin-left:auto;display:flex;gap:10px">
<button class="btn btn--outline btn--sm">多凭证管理</button>
<button class="btn btn--outline btn--sm">修改化名</button>
</div>
</div>
</section>
<section class="section card">
<div class="card__head"><span class="cn">会话</span></div>
<div class="set-row">
<svg style="width:16px;height:16px;color:var(--text-3)"><use href="#i-monitor"/></svg>
<div class="set-row__body"><div class="set-row__t">MacBook Pro · Tauri 桌面</div><div class="set-row__d">PKCE 登录 · 当前会话</div></div>
<span class="badge badge--ok" style="font-size:11px"><span class="badge__dot"></span>当前</span>
</div>
<div class="set-row">
<svg style="width:16px;height:16px;color:var(--text-3)"><use href="#i-monitor"/></svg>
<div class="set-row__body"><div class="set-row__t">iPhone · 移动端</div><div class="set-row__d">PKCE 登录 · 昨天活跃</div></div>
<button class="btn btn--ghost btn--sm">撤销</button>
</div>
</section>
<section class="section card" style="border-color:color-mix(in srgb,var(--accent) 35%,transparent)">
<div class="card__head"><span class="cn">私箧<span class="cn__plain">独立持钥的加密私密区</span></span><span class="badge badge--ok" style="margin-left:auto"><span class="badge__dot"></span>已启用 <span class="mono">locked</span></span></div>
<div class="set-row">
<svg style="width:16px;height:16px;color:var(--text-3)"><use href="#i-lock"/></svg>
<div class="set-row__body"><div class="set-row__t">平台仅存密文,不可恢复</div><div class="set-row__d">账户恢复、管理员与诊断均不可读取;恢复钥匙只在你手中,丢失即永久不可恢复。</div></div>
</div>
<div class="set-row">
<svg style="width:16px;height:16px;color:var(--text-3)"><use href="#i-file"/></svg>
<div class="set-row__body"><div class="set-row__t">使用量 12 MB</div><div class="set-row__d">日记 41 篇 · 手记 7 份 · 不参与任何推荐与训练</div></div>
<button class="btn btn--outline btn--sm">打开私箧</button>
</div>
</section>
<section class="section card">
<div class="card__head"><span class="cn">数据权<span class="cn__plain">访问 · 纠正 · 导出 · 撤权 · 删除</span></span></div>
<div class="set-row">
<div class="set-row__body">
<div class="set-row__t">模型训练贡献</div>
<div class="set-row__d">Personal Domain 数据默认不用于模型训练。自愿贡献需独立、明确、可随时撤销的同意。</div>
</div>
<span class="switch"><input type="checkbox" aria-label="自愿贡献训练数据(默认关闭)"><i></i></span>
</div>
<div class="set-row">
<div class="set-row__body"><div class="set-row__t">导出全部数据</div><div class="set-row__d">角色、设定、记忆、对话、资产与来源谱系 · 魂籍可携格式</div></div>
<button class="btn btn--outline btn--sm"><svg><use href="#i-download"/></svg>导出</button>
</div>
<div class="set-row">
<div class="set-row__body"><div class="set-row__t">撤回全部授权</div><div class="set-row__d">撤销插件、设备与第三方访问授权,数据保留</div></div>
<button class="btn btn--outline btn--sm">撤权</button>
</div>
<div class="set-row">
<div class="set-row__body"><div class="set-row__t" style="color:var(--cinnabar)">删除账户与全部数据</div><div class="set-row__d">不可逆 · 有冷静期 · 与角色死亡是两个独立操作 · 删除传播到索引与派生数据</div></div>
<button class="btn btn--danger btn--sm"><svg><use href="#i-trash"/></svg>删除</button>
</div>
</section>
<section class="section card">
<div class="card__head"><span class="cn">偏好</span></div>
<div class="set-row"><div class="set-row__body"><div class="set-row__t">界面主题</div><div class="set-row__d">墨(深色)/ 月白(浅色)· 跟随系统</div></div><span class="switch"><input type="checkbox" aria-label="深色主题"><i></i></span></div>
<div class="set-row"><div class="set-row__body"><div class="set-row__t">界面语言</div><div class="set-row__d">简体中文 · 文化名始终附带直白解释</div></div><button class="btn btn--ghost btn--sm">切换</button></div>
<div class="set-row"><div class="set-row__body"><div class="set-row__t">界面直白解释</div><div class="set-row__d">关闭后仅在高风险界面显示直白解释(不建议)</div></div><span class="switch"><input type="checkbox" checked aria-label="始终显示直白解释"><i></i></span></div>
</section>
<section class="section card danger-zone">
<div class="card__head"><span class="cn">封镜<span class="cn__plain">账户暂时停用 · 不是角色静修、归藏或死亡</span></span></div>
<p style="font-size:12.5px;color:var(--text-2);margin-bottom:12px">封镜期间登录被冻结,角色进入静修,数据完整保留;解封后可复照重开。</p>
<button class="btn btn--danger btn--sm">封镜账户</button>
</section>
</div>
</main>
</div>
<script src="assets/app.js?v=3"></script>
</body>
</html>