完善前端

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

+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>