初始化提交
This commit is contained in:
commit
887c1f449e
963 files changed
+166869
No files matched your search
@@ -0,0 +1,338 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN" data-theme="dark">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>魂镜 · 记忆页设计预览</title>
|
||||
<link rel="stylesheet" href="tokens.css" />
|
||||
<link rel="stylesheet" href="_base.css" />
|
||||
<link rel="stylesheet" href="_chrome.css" />
|
||||
<style>
|
||||
/* ============================================================
|
||||
* 铜镜鉴心 v2.1 — 记忆页:记忆分类 + MemoryRecord 卡片 + 检索/审查
|
||||
* 字段对齐 docs/domain/memory-model.md §2/§4/§5/§6(记忆分类、
|
||||
* MemoryRecord、写入规则、冲突裁决)与 web-ui-design.md §8。
|
||||
* ============================================================ */
|
||||
|
||||
/* ── 侧栏(active=记忆)── */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* ── 主区 ── */
|
||||
|
||||
.char-pill { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--patina); padding: 3px 11px 3px 4px; border: 1px solid var(--patina-dim); border-radius: 999px; background: var(--patina-wash); }
|
||||
.char-pill .avatar-mini { width: 18px; height: 18px; border-radius: 50%; background: var(--patina); color: var(--ink); display: flex; align-items: center; justify-content: center; font-family: "Songti SC", serif; font-size: 11px; font-weight: 600; }
|
||||
.page-header .spacer { flex: 1; }
|
||||
.pending-pill { display: inline-flex; align-items: center; gap: 6px; font-family: "JetBrains Mono", monospace; font-size: 12px; color: var(--gilt); padding: 4px 12px; border: 1px solid var(--gilt-dim); border-radius: 999px; background: var(--gilt-faint); }
|
||||
|
||||
.section-label .sub { font-size: 12px; letter-spacing: 0.04em; color: var(--fg-dim); opacity: 0.75; }
|
||||
.section-label .glyph { color: var(--gilt); opacity: 0.8; }
|
||||
|
||||
/* 分类栏 */
|
||||
.type-bar { display: flex; gap: 8px; flex-wrap: wrap; }
|
||||
.type-chip { font-size: 12.5px; padding: 5px 13px; border-radius: 999px; border: 1px solid var(--rule); color: var(--fg-dim); cursor: pointer; background: var(--surface); display: inline-flex; align-items: center; gap: 6px; transition: background 0.12s, color 0.12s, border-color 0.12s; }
|
||||
.type-chip:hover { color: var(--fg); border-color: var(--gilt-dim); }
|
||||
.type-chip.active { color: var(--patina); border-color: var(--patina-dim); background: var(--patina-wash); }
|
||||
.type-chip .cnt { font-family: "JetBrains Mono", monospace; font-size: 10.5px; opacity: 0.7; }
|
||||
|
||||
/* 统计四格 */
|
||||
.stat-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
|
||||
.stat-card { border: 1px solid var(--rule); border-radius: 7px; background: var(--surface); padding: 14px 16px; display: flex; flex-direction: column; gap: 4px; }
|
||||
.stat-card .k { font-family: "JetBrains Mono", monospace; font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.1em; color: var(--fg-faint); }
|
||||
.stat-card .v { font-family: "Songti SC", serif; font-size: 22px; font-weight: 600; color: var(--fg); }
|
||||
.stat-card .v small { font-size: 11px; font-weight: 400; color: var(--fg-dim); font-family: "JetBrains Mono", monospace; margin-left: 4px; }
|
||||
.stat-card .sub { font-size: 11.5px; color: var(--fg-faint); }
|
||||
.stat-card.alert .v { color: var(--cinnabar); }
|
||||
.stat-card.warn .v { color: var(--gilt); }
|
||||
|
||||
/* 记忆卡列表 + 右栏 */
|
||||
.mem-region { display: flex; gap: 20px; align-items: flex-start; }
|
||||
.mem-main { flex: 1; min-width: 0; }
|
||||
.mem-rail { width: 300px; flex-shrink: 0; display: flex; flex-direction: column; gap: 14px; }
|
||||
|
||||
.mem-list { display: flex; flex-direction: column; gap: 10px; }
|
||||
.mem-card { border: 1px solid var(--rule); border-radius: 7px; background: var(--surface); padding: 13px 15px; transition: border-color 0.12s; }
|
||||
.mem-card:hover { border-color: var(--gilt-dim); }
|
||||
.mem-card.high-sens { border-color: var(--cinnabar-dim); background: rgba(184, 57, 46, 0.04); }
|
||||
.mem-card.pending { border-color: var(--gilt-dim); background: var(--gilt-faint); }
|
||||
.mem-head { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
|
||||
.mem-title { font-size: 14px; font-weight: 600; color: var(--fg); }
|
||||
.mem-type { font-family: "JetBrains Mono", monospace; font-size: 10px; padding: 2px 7px; border-radius: 3px; border: 1px solid var(--rule); color: var(--fg-faint); white-space: nowrap; }
|
||||
.mem-type.identity { color: var(--patina); border-color: var(--patina-dim); }
|
||||
.mem-type.user { color: var(--patina); border-color: var(--patina-dim); }
|
||||
.mem-type.episodic { color: var(--gilt); border-color: var(--gilt-dim); }
|
||||
.mem-type.semantic { color: var(--gilt); border-color: var(--gilt-dim); }
|
||||
.mem-type.procedural { color: var(--water, #5a7fa6); border-color: rgba(90, 127, 166, 0.38); }
|
||||
.mem-type.relational { color: var(--patina); border-color: var(--patina-dim); }
|
||||
.mem-type.emotional { color: var(--cinnabar); border-color: var(--cinnabar-dim); }
|
||||
.mem-type.reflection { color: var(--gilt); border-color: var(--gilt-dim); }
|
||||
.mem-type.evolution { color: var(--cinnabar); border-color: var(--cinnabar-dim); }
|
||||
.mem-content { font-size: 12.5px; color: var(--fg-dim); margin-top: 6px; line-height: 1.55; }
|
||||
.mem-meta { display: flex; gap: 16px; margin-top: 9px; flex-wrap: wrap; align-items: center; }
|
||||
.meta-item { font-size: 11.5px; color: var(--fg-dim); display: inline-flex; align-items: center; gap: 6px; }
|
||||
.meta-item .lab { color: var(--fg-faint); font-family: "JetBrains Mono", monospace; font-size: 10px; text-transform: uppercase; letter-spacing: 0.06em; }
|
||||
.meta-bar { width: 54px; height: 4px; border-radius: 2px; background: var(--rule); overflow: hidden; position: relative; }
|
||||
.meta-bar .fill { position: absolute; left: 0; top: 0; bottom: 0; border-radius: 2px; }
|
||||
.meta-item.conf .fill { background: var(--patina); }
|
||||
.meta-item.imp .fill { background: var(--gilt); }
|
||||
.meta-item .vv { font-family: "JetBrains Mono", monospace; font-size: 10.5px; }
|
||||
.meta-item.conf .vv { color: var(--patina); }
|
||||
.meta-item.imp .vv { color: var(--gilt); }
|
||||
.sens-badge { font-family: "JetBrains Mono", monospace; font-size: 10px; padding: 2px 7px; border-radius: 3px; border: 1px solid var(--rule); }
|
||||
.sens-badge.none { color: var(--fg-faint); }
|
||||
.sens-badge.low { color: var(--patina); border-color: var(--patina-dim); }
|
||||
.sens-badge.medium { color: var(--gilt); border-color: var(--gilt-dim); }
|
||||
.sens-badge.high { color: var(--cinnabar); border-color: var(--cinnabar-dim); background: rgba(184, 57, 46, 0.1); }
|
||||
.mem-foot { display: flex; align-items: center; gap: 10px; margin-top: 10px; padding-top: 9px; border-top: 1px solid var(--rule); font-size: 11px; color: var(--fg-faint); flex-wrap: wrap; }
|
||||
.mem-foot .evi { display: inline-flex; align-items: center; gap: 4px; }
|
||||
.mem-foot .act { margin-left: auto; display: flex; gap: 6px; }
|
||||
.mem-foot .act button { font-family: inherit; font-size: 11px; padding: 3px 10px; border-radius: 5px; border: 1px solid var(--rule); background: var(--surface); color: var(--fg-dim); cursor: pointer; }
|
||||
.mem-foot .act button:hover { color: var(--fg); border-color: var(--gilt-dim); }
|
||||
.mem-foot .act button.primary { color: var(--patina); border-color: var(--patina-dim); background: var(--patina-wash); }
|
||||
|
||||
/* 右栏 */
|
||||
.rail-card { background: var(--surface); border: 1px solid var(--rule); border-radius: 8px; padding: 16px 18px; }
|
||||
.rail-card h3 { font-family: "Songti SC", serif; font-size: 14px; font-weight: 600; color: var(--fg); margin: 0 0 12px; }
|
||||
.search-box { display: flex; align-items: center; gap: 8px; padding: 8px 12px; border: 1px solid var(--rule); border-radius: 7px; background: var(--ink); }
|
||||
.search-box input { flex: 1; background: none; border: none; outline: none; color: var(--fg); font-family: inherit; font-size: 13px; }
|
||||
.search-box input::placeholder { color: var(--fg-faint); }
|
||||
.review-list { display: flex; flex-direction: column; gap: 8px; }
|
||||
.review-rule { display: flex; align-items: flex-start; gap: 8px; font-size: 12px; color: var(--fg-dim); line-height: 1.5; }
|
||||
.review-rule .mark { color: var(--cinnabar); flex-shrink: 0; font-family: "Songti SC", serif; font-weight: 700; }
|
||||
.review-rule.allow .mark { color: var(--patina); }
|
||||
.conflict-row { display: flex; align-items: center; gap: 9px; padding: 9px 11px; border-radius: 5px; background: var(--ink); border: 1px solid var(--cinnabar-dim); font-size: 12px; }
|
||||
.conflict-row .pair { font-family: "Songti SC", serif; color: var(--cinnabar); flex-shrink: 0; }
|
||||
.conflict-row .desc { color: var(--fg-dim); flex: 1; min-width: 0; }
|
||||
.conflict-row .verdict { font-family: "JetBrains Mono", monospace; font-size: 10px; color: var(--gilt); white-space: nowrap; }
|
||||
|
||||
@media (max-width: 1080px) { .mem-region { flex-direction: column; } .mem-rail { width: 100%; } }
|
||||
@media (max-width: 900px) { .stat-grid { grid-template-columns: repeat(2, 1fr); } }
|
||||
@media (max-width: 768px) { .sidebar-wrap { display: none; } .page-body { padding: 18px 16px 40px; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="app-shell">
|
||||
<!-- ════════ 侧栏 ════════ -->
|
||||
<div class="sidebar-mount" data-active="记忆"></div>
|
||||
|
||||
<!-- ════════ 主区 ════════ -->
|
||||
<div class="main-area">
|
||||
<div class="page-header">
|
||||
<span class="page-title">记忆</span>
|
||||
<span class="page-sub">息壤枢 · 长期记忆</span>
|
||||
<span class="char-pill"><span class="avatar-mini">梧</span>青梧</span>
|
||||
<span class="spacer"></span>
|
||||
<span class="pending-pill">3 条候选待审</span>
|
||||
</div>
|
||||
|
||||
<div class="page-body">
|
||||
<!-- 分类栏 -->
|
||||
<div>
|
||||
<div class="section-label"><span class="glyph">⟡</span> 记忆分类 <span class="sub">基础五类 + 扩展五类</span></div>
|
||||
<div class="type-bar">
|
||||
<span class="type-chip active">全部 <span class="cnt">186</span></span>
|
||||
<span class="type-chip">身份 <span class="cnt">8</span></span>
|
||||
<span class="type-chip">用户 <span class="cnt">23</span></span>
|
||||
<span class="type-chip">情节 <span class="cnt">61</span></span>
|
||||
<span class="type-chip">语义 <span class="cnt">34</span></span>
|
||||
<span class="type-chip">程序 <span class="cnt">19</span></span>
|
||||
<span class="type-chip">关系 <span class="cnt">15</span></span>
|
||||
<span class="type-chip">情绪 <span class="cnt">11</span></span>
|
||||
<span class="type-chip">世界 <span class="cnt">9</span></span>
|
||||
<span class="type-chip">反思 <span class="cnt">4</span></span>
|
||||
<span class="type-chip">演化 <span class="cnt">2</span></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 统计 -->
|
||||
<div class="stat-grid">
|
||||
<div class="stat-card"><div class="k">记忆总数</div><div class="v">186</div><div class="sub">活跃 174 · 已删 12</div></div>
|
||||
<div class="stat-card alert"><div class="k">高敏感</div><div class="v">5<small>条</small></div><div class="sub">默认不自动注入</div></div>
|
||||
<div class="stat-card warn"><div class="k">待审候选</div><div class="v">3<small>条</small></div><div class="sub">写入审查中</div></div>
|
||||
<div class="stat-card"><div class="k">本周新增</div><div class="v">14<small>条</small></div><div class="sub">证据关联率 0.81</div></div>
|
||||
</div>
|
||||
|
||||
<!-- 记忆卡 + 右栏 -->
|
||||
<div class="mem-region">
|
||||
<div class="mem-main">
|
||||
<h3 style="font-family:"Songti SC",serif;font-size:14px;font-weight:600;color:var(--fg);margin-bottom:14px">记忆条目 <span style="font-size:12px;font-weight:400;color:var(--fg-dim);font-family:"JetBrains Mono",monospace;margin-left:6px">MemoryRecord · 置信度 × 重要性 × 来源 × 证据</span></h3>
|
||||
<div class="mem-list">
|
||||
<div class="mem-card">
|
||||
<div class="mem-head">
|
||||
<span class="mem-title">用户偏好简洁回答</span>
|
||||
<span class="mem-type user">user</span>
|
||||
<span class="sens-badge low">sens · low</span>
|
||||
</div>
|
||||
<div class="mem-content">用户多次要求"长话短说,先给结论",倾向结构化、要点式回复。</div>
|
||||
<div class="mem-meta">
|
||||
<span class="meta-item conf"><span class="lab">conf</span><span class="meta-bar"><span class="fill" style="width:92%"></span></span><span class="vv">0.92</span></span>
|
||||
<span class="meta-item imp"><span class="lab">imp</span><span class="meta-bar"><span class="fill" style="width:80%"></span></span><span class="vv">0.80</span></span>
|
||||
<span class="meta-item"><span class="lab">来源</span>用户明确表达</span>
|
||||
</div>
|
||||
<div class="mem-foot">
|
||||
<span class="evi">📎 3 条证据</span>
|
||||
<span>更新于 07-09</span>
|
||||
<span class="act"><button type="button">编辑</button><button type="button">版本</button></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mem-card pending">
|
||||
<div class="mem-head">
|
||||
<span class="mem-title">用户近期提及"想学陶艺"</span>
|
||||
<span class="mem-type episodic">episodic</span>
|
||||
<span class="sens-badge medium">sens · medium</span>
|
||||
</div>
|
||||
<div class="mem-content">07-11 对话中两次提到对陶艺的兴趣,疑为长期目标候选--待确认是否长期偏好。</div>
|
||||
<div class="mem-meta">
|
||||
<span class="meta-item conf"><span class="lab">conf</span><span class="meta-bar"><span class="fill" style="width:58%"></span></span><span class="vv">0.58</span></span>
|
||||
<span class="meta-item imp"><span class="lab">imp</span><span class="meta-bar"><span class="fill" style="width:66%"></span></span><span class="vv">0.66</span></span>
|
||||
<span class="meta-item"><span class="lab">来源</span>对话推断</span>
|
||||
</div>
|
||||
<div class="mem-foot">
|
||||
<span class="evi">📎 2 条证据</span>
|
||||
<span>待写入审查</span>
|
||||
<span class="act"><button type="button" class="primary">采纳</button><button type="button">驳回</button></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mem-card high-sens">
|
||||
<div class="mem-head">
|
||||
<span class="mem-title">用户健康指标(睡眠 / 心率摘要)</span>
|
||||
<span class="mem-type user">user</span>
|
||||
<span class="sens-badge high">sens · high</span>
|
||||
</div>
|
||||
<div class="mem-content">来自感知摘要的结构化健康状态,高敏感--仅在用户主动询问时按需召回,不进入常规上下文。</div>
|
||||
<div class="mem-meta">
|
||||
<span class="meta-item conf"><span class="lab">conf</span><span class="meta-bar"><span class="fill" style="width:88%"></span></span><span class="vv">0.88</span></span>
|
||||
<span class="meta-item imp"><span class="lab">imp</span><span class="meta-bar"><span class="fill" style="width:45%"></span></span><span class="vv">0.45</span></span>
|
||||
<span class="meta-item"><span class="lab">来源</span>感知事件</span>
|
||||
</div>
|
||||
<div class="mem-foot">
|
||||
<span class="evi">📎 5 条证据</span>
|
||||
<span>受限注入</span>
|
||||
<span class="act"><button type="button">查看</button><button type="button">遗忘</button></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mem-card">
|
||||
<div class="mem-head">
|
||||
<span class="mem-title">人格基调:温和而克制</span>
|
||||
<span class="mem-type identity">identity</span>
|
||||
<span class="sens-badge none">sens · none</span>
|
||||
</div>
|
||||
<div class="mem-content">角色设定确立的稳定身份记忆:语气克制、不轻许诺、重视边界。与人格面板同源。</div>
|
||||
<div class="mem-meta">
|
||||
<span class="meta-item conf"><span class="lab">conf</span><span class="meta-bar"><span class="fill" style="width:99%"></span></span><span class="vv">0.99</span></span>
|
||||
<span class="meta-item imp"><span class="lab">imp</span><span class="meta-bar"><span class="fill" style="width:95%"></span></span><span class="vv">0.95</span></span>
|
||||
<span class="meta-item"><span class="lab">来源</span>初始设定</span>
|
||||
</div>
|
||||
<div class="mem-foot">
|
||||
<span class="evi">📎 1 条证据</span>
|
||||
<span>更新于 05-31</span>
|
||||
<span class="act"><button type="button">编辑</button></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mem-card">
|
||||
<div class="mem-head">
|
||||
<span class="mem-title">夜间回复易触发关怀语气</span>
|
||||
<span class="mem-type emotional">emotional</span>
|
||||
<span class="sens-badge low">sens · low</span>
|
||||
</div>
|
||||
<div class="mem-content">23:00 后用户对话情绪偏脆弱,灵核情绪状态机转入 wistful;回复基调相应软化。</div>
|
||||
<div class="mem-meta">
|
||||
<span class="meta-item conf"><span class="lab">conf</span><span class="meta-bar"><span class="fill" style="width:74%"></span></span><span class="vv">0.74</span></span>
|
||||
<span class="meta-item imp"><span class="lab">imp</span><span class="meta-bar"><span class="fill" style="width:70%"></span></span><span class="vv">0.70</span></span>
|
||||
<span class="meta-item"><span class="lab">来源</span>情绪归纳</span>
|
||||
</div>
|
||||
<div class="mem-foot">
|
||||
<span class="evi">📎 4 条证据</span>
|
||||
<span>更新于 07-10</span>
|
||||
<span class="act"><button type="button">编辑</button></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mem-card">
|
||||
<div class="mem-head">
|
||||
<span class="mem-title">工具调用:发消息前必须二次确认</span>
|
||||
<span class="mem-type procedural">procedural</span>
|
||||
<span class="sens-badge none">sens · none</span>
|
||||
</div>
|
||||
<div class="mem-content">程序性经验:send_message 属 L3 高风险,任何渠道发送前需用户确认,不可自动执行。</div>
|
||||
<div class="mem-meta">
|
||||
<span class="meta-item conf"><span class="lab">conf</span><span class="meta-bar"><span class="fill" style="width:96%"></span></span><span class="vv">0.96</span></span>
|
||||
<span class="meta-item imp"><span class="lab">imp</span><span class="meta-bar"><span class="fill" style="width:90%"></span></span><span class="vv">0.90</span></span>
|
||||
<span class="meta-item"><span class="lab">来源</span>安全教训</span>
|
||||
</div>
|
||||
<div class="mem-foot">
|
||||
<span class="evi">📎 2 条证据</span>
|
||||
<span>更新于 06-28</span>
|
||||
<span class="act"><button type="button">编辑</button></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mem-rail">
|
||||
<div class="rail-card">
|
||||
<h3>检索记忆</h3>
|
||||
<div class="search-box">
|
||||
<svg width="14" height="14" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" style="color:var(--fg-faint)"><circle cx="7" cy="7" r="4.5" /><path d="M10.5 10.5L14 14" /></svg>
|
||||
<input type="text" placeholder="按内容 / 来源 / 证据检索…" />
|
||||
</div>
|
||||
<div style="margin-top:10px;font-size:11px;color:var(--fg-faint);font-family:'JetBrains Mono',monospace">召回策略 · 混合(语义 + 时间衰减 + 重要度)</div>
|
||||
</div>
|
||||
|
||||
<div class="rail-card">
|
||||
<h3>写入审查规则 <span style="font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--fg-faint);font-weight:400">§5</span></h3>
|
||||
<div class="review-list">
|
||||
<div class="review-rule allow"><span class="mark">✓</span><span>用户明确要求记住 · 长期偏好 · 反复出现的事实</span></div>
|
||||
<div class="review-rule"><span class="mark">✕</span><span>含密钥 / 令牌 / 密码 · 签名 URL</span></div>
|
||||
<div class="review-rule"><span class="mark">✕</span><span>未经验证的推断当事实写入</span></div>
|
||||
<div class="review-rule"><span class="mark">!</span><span>高敏感默认不自动写入,需用户确认</span></div>
|
||||
<div class="review-rule"><span class="mark">!</span><span>与既有记忆重复 → 合并而非新增</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="rail-card">
|
||||
<h3>冲突裁决 <span style="font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--fg-faint);font-weight:400">§6.1</span></h3>
|
||||
<div style="display:flex;flex-direction:column;gap:8px">
|
||||
<div class="conflict-row">
|
||||
<span class="pair">新 vs 旧</span>
|
||||
<span class="desc">"偏好简洁" 与旧记忆 "偏好详细" 冲突</span>
|
||||
<span class="verdict">置信高者胜</span>
|
||||
</div>
|
||||
<div class="conflict-row">
|
||||
<span class="pair">覆写</span>
|
||||
<span class="desc">新证据置信 0.92 > 旧 0.61</span>
|
||||
<span class="verdict">已合并</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="_theme.js" defer></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in new issue
Block a user