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 约束;媒体字节在块被永久删除时回收,但如果同一份字节仍被别的块共享,则不删。