From 7b7d405463c9f9caa9686dc9e0d66e97dd9adc68 Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Sun, 20 Sep 2026 23:37:16 +0800 Subject: [PATCH] =?UTF-8?q?site:=20=E9=87=8D=E5=81=9A=E7=AC=AC=203/5=20?= =?UTF-8?q?=E5=BC=A0=E7=A4=BA=E6=84=8F=E5=9B=BE=20+=20=E5=88=A0=E5=86=97?= =?UTF-8?q?=E9=95=BF=E6=96=87=E6=A1=88=20+=20=E4=BF=AE=E4=B8=AD=E6=96=87?= =?UTF-8?q?=E6=8E=92=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户反馈:3/5 页面图片不够精致、动画单调;hero 与架构节两句文案啰嗦; 图 1 那句注释要删。 ## ① 删掉两处冗余文案 - 图 1 的 `

箭头只进出插件 —— 内核一列都没有

`: 图上已经画出来了(光球只打插件、内核周围无连线),注解是重复 - 架构节副标题的「插件可改写或短路」:与组件表里 `Stage` 那行完全重复 (那行还更具体,带 1/4/2 的阶段分布) ## ② hero 副标题重写 原文「内核只管编排、记忆与调度,消息 / 文件 / 网络 / 设备一律交给插件。 插件崩了不牵连内核 —— 换掉一个二进制就热重载。」三重堆叠、句子太长。 改短后又发现**两处与源码不符**,一并改准: - 「热重载」不是崩溃后的行为。崩溃走的是退避重启 (`scheduleProcRestart`:1s/2s/3s,`AutoRestartEnabled` 默认 true), `ReloadOne` 是换二进制那条路径。混成一句等于说错。 - 改为「崩了自己重启,波及不到内核」。 ## ③ 图 3(共享内存):从稀疏线框重画 原图 19 个元素、层次扁平。重画后 53 个元素、三层递进: - 两个进程做成带玻璃高光的卡片,各标自己的**虚拟地址**(0x7f2a… / 0x55c1…) - 中间一句桥接:「不同虚拟地址 · 同一物理页」——这才是零拷贝的关键 - 物理页外框呼吸描边 + 极淡填充 - 段内标出 `header`(魔数·版本)与 `arena`,并加**字节刻度**, 把「一片区域」讲成「有结构的区域」 ## ④ 图 5(长任务转投):填掉大片空白 原图下三分之一完全空着,且「两种出路」只写在文案里、图上没有任何体现。 - 主 agent 加**忙碌进度条**(一直爬不到头,呼应「占住很久」) - 积压消息由 2 条改 3 条、宽度递减成「一摞」,并逐条被取走 - 右上空白填入**触发条件**,给的是源码实测默认值 (`defaultOffloadBusyAfter = 5min`、`defaultOffloadMinPending = 3`), 并注明「默认关闭,需部署方打开」 - 新增回执区:`① 简单 → 直接办完,发回原通道` / `② 需主 agent → 回「忙碌中,请稍候」`,并用光点示意回执送达用户 ## ⑤ 排版:中文之间夹空格 改文案时实测发现正文里有「实时 渲染」这类中文间空格 —— 源码换行被浏览器 渲染成一个空格。找出真实渲染有空格的位置并修掉(改用 innerText 判定, textContent 会把 `` 等块边界误判为空格,实测误报了 2 处)。 ## 自己踩到并修掉的几个坑 - 「各自的虚拟地址」两句标签被竖向虚线穿过(压字)→ 改为一句居中桥接 - 图 3 标题靠左时被 `x=72` 的写入虚线穿过 → 改居中 - 玻璃高光整块铺满像蒙了层白纱 → 收到上半部、透明度 .3 - 巡行光点框看起来像页内多了一层框 → 去掉,改为外框呼吸 - 内层标题与外层桥接都在说「同一物理页」→ 内层改为描述段布局 ## 验证 - 深浅双主题逐图截图核对(图 3、图 5 各两套) - 动画:图 3 从 5 → 11 个动画元素、图 5 从 8 → 10;元素总数 19→53、17→45 - reduce 下新增的 CSS 动画(physBreathe、dv5-pile、忙碌条)全部停; SMIL 仍靠 pauseAnimations,8/8 SVG 已暂停 - 回归:深浅主题 / JS 禁用 / reduce / 390·768·1440 三档,零横向溢出、无控制台错误 - 结构:CSS 括号平衡、HTML 无未闭合标签 --- site/index.html | 235 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 181 insertions(+), 54 deletions(-) diff --git a/site/index.html b/site/index.html index cd953a6..6471b05 100644 --- a/site/index.html +++ b/site/index.html @@ -725,6 +725,57 @@ 走动的包用 .dv-pkdot(金色)。 */ .dv-pkline { fill: none; stroke: var(--brand-gold); stroke-width: 1.1; opacity: .22; } + /* ── 图 5 新增图元 ── */ + /* 主 agent 的忙碌条:一直爬不到头,呼应「占住很久」 */ + .dv-busy-track { fill: var(--border); opacity: .5; } + .dv-busy-fill { fill: var(--brand-blue); opacity: .75; } + /* 回执区:极淡底 + 虚线边,与主干道区分开 */ + .dv5-band { fill: var(--bg-card); stroke: var(--border); stroke-width: 1; stroke-dasharray: 5 4; opacity: .55; } + .dv5-chip { fill: var(--bg-elev, var(--bg-card)); stroke: var(--border-hi); stroke-width: 1; } + .dv5-out1 { fill: var(--brand-cyan); font-size: 9.4px; text-anchor: middle; } + .dv5-out2 { fill: var(--text-muted); font-size: 9.4px; text-anchor: middle; } + /* 触发条件卡:金色系,与「忙碌」呼应;也给的是可核验的默认值 */ + .dv5-trigger { fill: none; stroke: var(--brand-gold); stroke-width: 1.2; stroke-dasharray: 5 4; opacity: .6; } + .dv5-tcap { fill: var(--brand-gold); font-size: 9.6px; text-anchor: middle; font-weight: 600; letter-spacing: .04em; } + .dv5-tval { fill: var(--text-dim); font-size: 9.6px; text-anchor: middle; } + .dv5-tnote { fill: var(--text-muted); font-size: 8.6px; text-anchor: middle; } + /* 积压条被逐条取走 */ + .js-fx .dv5-pile rect { animation: queueTake 3.6s ease-in-out infinite; } + .js-fx .dv5-pile rect:nth-of-type(1) { animation-delay: 0s; } + .js-fx .dv5-pile rect:nth-of-type(2) { animation-delay: .5s; } + .js-fx .dv5-pile rect:nth-of-type(3) { animation-delay: 1s; } + + /* ── 图 3 新增图元 ── */ + /* 玻璃高光:贴在方块上半部,营造「有厚度的一层壳」 */ + .dv-sheen { + fill: url(#gSheen); + /* 只盖上半部、透明度低。整块铺满会像蒙了层白纱(实测过)。 */ + opacity: .3; + pointer-events: none; + } + /* 进程的虚拟地址:左右各自靠边,避开中间的竖向连接线 */ + .dv-addr { fill: var(--text-muted); font-size: 10px; font-family: var(--font-mono); text-anchor: start; } + .dv-addr-r { text-anchor: end; } + /* 桥接说明:居中,压在两条竖向虚线之间,不与任何线重叠 */ + .dv-bridge { fill: var(--brand-cyan); font-size: 10px; text-anchor: middle; font-weight: 600; } + /* 物理页标题:也居中。靠左会被 x=72 那条写入虚线穿过(实测压字)。 */ + .dv-physcap { fill: var(--brand-cyan); font-size: 10.5px; text-anchor: middle; font-weight: 600; opacity: .9; } + /* 同一物理页的呼吸描边 */ + .dv-phys-glow { fill: none; stroke: var(--brand-cyan); stroke-width: 2; opacity: 0; } + @keyframes physBreathe { + 0%, 100% { opacity: 0; } + 50% { opacity: .38; } + } + .js-fx .dv-phys-glow { animation: physBreathe 4.4s ease-in-out infinite; } + /* 同一物理页:实线外框 + 极淡填充,与「虚拟地址」的虚线形成对比 */ + .dv-phys { fill: none; stroke: var(--brand-cyan); stroke-width: 1.6; opacity: .5; } + .dv-page-fill { fill: url(#gPage); } + /* arena 字节刻度:细密竖线,把「一片区域」讲成「有结构的区域」 */ + .dv-ticks path { stroke: var(--text-muted); stroke-width: 0.8; opacity: .35; } + /* 同页连通线:两进程之间的一条细光路 */ + .dv-pagelink { fill: none; stroke: var(--brand-cyan); stroke-width: 1.1; opacity: .30; stroke-dasharray: 3 3; } + .dv-linkdot { fill: var(--brand-cyan); filter: url(#fGlow); } + /* 级别强度条(图 4):从 L1 到 L4 依次点亮,表现「级别越低越可等、 越高越紧急」。静态时四条只是深浅不同的背景,看不出递进。 */ .dv-gauge-fill rect { opacity: .45; } @@ -1993,8 +2044,7 @@ 常驻型个人 Agent 框架

记得住的管家
更是从不让你干等的搭档

- 内核只管编排、记忆与调度,消息 / 文件 / 网络 / 设备 - 一律交给插件。插件崩了不牵连内核 —— 换掉一个二进制就热重载。 + 内核只做编排、记忆、调度三件事,其余由插件桥接,崩了自己重启,波及不到内核。

快速上手 → @@ -2187,7 +2237,6 @@ -

箭头只进出插件 —— 内核一列都没有

@@ -2254,35 +2303,73 @@
- - 内核 - homed - - 插件 - plugin.bin - - 共享内存段(一块,两边同一物理页) - - header - - arena 变长数据 - {off, len} 相对基址 - - - - - - + + + + + + + + + + 0x7f2a… + 0x55c1… + + + + homed + 进程 A + + + + + plugin.bin + 进程 B + + + + + 不同虚拟地址 · 同一物理页 + + + + + 段布局:定长头 + 变长 arena + + + + header + 魔数 · 版本 + + + + arena + 变长数据 · {off, len} 相对基址 + + + + + + + + + + - - - 零拷贝:不序列化、不复制 + + + + + 零拷贝:不序列化、不复制

实测整段写入+读回 3.5µs

@@ -2401,41 +2488,83 @@ 05

忙时,有人替你接住

- 主 agent 被长任务占住、积压又够多时,内核把这些消息转给一个 - 临时驻留的分诊助手。能当场办的就办了; + 主 agent 被长任务占住、积压又够多时,内核把这些消息转给一个临时驻留的分诊助手。能当场办的就办了; 非等主 agent 不可的,立刻回一句「忙碌中,请稍候」。 你不必对着对话框猜它还在不在。

- - - 主 agent - 长任务 · 占住很久 - - - 积压消息 ×3 - - 积压消息 ×4 + + + + + 主 agent + 长任务 · 占住很久 + + + + + + + + 触发条件 + 忙超 5 分钟 · 积压 ≥ 3 条 + 默认关闭,需部署方打开 + + + + + 积压消息 ×3 + + 积压消息 ×4 + + 积压消息 ×2 - - 转投 - + + + + + 分诊助手 + 临时驻留子 + 当场办 / 立刻答 + + + + + 转投 - - - - 分诊助手 - 当场办 / 立刻答 - - - 不必干等 + + + + + + + + + + 用户 + 不必干等 + + + + ① 简单 → 直接办完,发回原通道 + ② 需主 agent → 回「忙碌中,请稍候」 + + + + + +
@@ -2520,7 +2649,7 @@

一条消息进来之后

- 输入先过调度器,再进处理管道。全程 7 个阶段钩子,插件可改写或短路。 + 输入先过调度器,再进处理管道。全程 7 个阶段钩子。

@@ -2810,8 +2939,7 @@ echo "你好,记住我喜欢喝咖啡" | ./build/waiter
「内核零 IO」是不是意味着内核很简单?

- 恰恰相反。零 IO 是为了让内核专注做难的部分:输入调度(四级中断、抢占与 - 现场保存)、上下文预算、三层记忆的蒸馏与召回。IO 挪出去之后,这些才有 + 恰恰相反。零 IO 是为了让内核专注做难的部分:输入调度(四级中断、抢占与现场保存)、上下文预算、三层记忆的蒸馏与召回。IO 挪出去之后,这些才有 清晰的所有权。

@@ -2848,8 +2976,7 @@ echo "你好,记住我喜欢喝咖啡" | ./build/waiter
记忆会不会无限膨胀?

- 不会。三层是迁移而非复制:上下文事件裁剪后归档成文档,文档冷掉后蒸馏成 - 图谱三元组。图谱有去重与 UNIQUE 约束;媒体字节在块被永久删除时回收,但如果同一份字节仍被别的块共享,则不删。 + 不会。三层是迁移而非复制:上下文事件裁剪后归档成文档,文档冷掉后蒸馏成图谱三元组。图谱有去重与 UNIQUE 约束;媒体字节在块被永久删除时回收,但如果同一份字节仍被别的块共享,则不删。