崩一个,不赔上全部
-插件不在内核里,是另一个进程。崩了就把它注册的东西一并摘掉,其余照跑。
- 退避重启 1s / 2s / 3s;5 分钟内第 4 次崩溃即停下等人 +插件不在内核里,是另一个进程。崩了就把它注册的东西一并摘掉,其余照跑。重启退避 1s / 2s / 3s,5 分钟内第 4 次崩溃则停下等人。
From 7cc4c3960fb75f44095f5e7e1e80f54883018556 Mon Sep 17 00:00:00 2001
From: JianFeeeee <109188060+JianFeeeee@users.noreply.github.com>
Date: Mon, 21 Sep 2026 10:23:06 +0800
Subject: [PATCH] =?UTF-8?q?site:=20=E6=AD=A3=E5=90=8D=E3=80=8C=E9=A9=BB?=
=?UTF-8?q?=E7=95=99=E5=AD=90=20agent=E3=80=8D+=20=E5=88=A0=E5=87=80?=
=?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=B0=8F=E5=AD=97=E6=B3=A8=E8=A7=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
用户两点意见:
1. 那个东西不叫「分诊助手」,叫**驻留子 agent**
2. 页面上加的小字注解全是废话,全删
## ① 正名:分诊助手 → 驻留子 agent
「分诊」只是 offload.go 里对**职责**的描述(triage),
`resident.go` 顶注给的正式名是「驻留子」,`docs/zh/resident-subagent-design.md`
也把它列为独立概念(根 agent / 驻留子 / 工作式轻量子三类)。
7 处全部改正,含图内 SVG 文字、`aria-label`、架构流程图、FAQ 正文:
| 位置 | 原 | 现 |
|---|---|---|
| 图 5 框标题 | 分诊助手 | 驻留子 agent |
| 图 5 框内第二行 | 临时驻留子 | (删,与标题重复) |
| 图 5 的 aria-label | 转投给分诊助手 | 转投给驻留子 agent |
| 正文 | 转给一个临时驻留的**分诊助手** | 转给一个**驻留子 agent** |
| 架构图转投分支 | → 转投临时分诊助手 | → 转投驻留子 agent |
| FAQ | 这正是「分诊助手」的用途 | 这正是驻留子 agent 的用途 |
| CSS 注释 | 分诊助手接到消息 | 驻留子 agent 接到消息 |
## ② 删掉 11 处注解小字
原则:**复述图上已画出来的、或标题已说过的** → 删;
**承载数据**(插件版本 / 源码路径 / SVG 图内必要标签)→ 留。
- `.duty-note` ×6:架构图里 6 个阶段下面那行灰字
(「构建消息与工具表 · 插件可在此短路」等)—— 阶段名本身已经说清,
而这 6 行会把循环框右半边撑空
- `.flow-note`:重复解释 `on_input` / `before_output` 跑在什么时候
- `.dv-caps` ×3:图 4 的「任何中断都能插它前面」「被打断的现场压入中断栈」、
图 5 的「不必干等」—— 图上插队动线和回执 chip 已经把它们画出来了
- `.dv-note` ×2:图 2「实测:statically linked,无动态依赖」、
图 3「实测整段写入+读回 3.5µs」—— 数字重复
- `.dv5-tnote`:「默认关闭,需部署方打开」—— FAQ 里有完整说明(含理由)
- `.duty-ev` ×4 + `.sm` ×4:证据行/注释行,数字并回正文
(「实测整段写入 + 读回 3.5µs。」等)
## ③ 删小字的连带修正
- **11 处死 CSS 全部清掉**(`.duty-ev` / `.flow-note` / `.dv-caps` /
`.dv-note` / `.dv5-tnote` / `.sm`),单文件不留无人引用的规则
- 循环框删掉 6 行灰字后**右半边空了一大块** → 改为 `fit-content` 收窄居中
## 自己踩到并改掉的坑
- 循环框收得太窄(16rem),回边徽标「有工具调用则回到 ①」**压住**
`after_toolcall` → 加 `min-width` 并加大底部 padding
- 想让循环框占满宽度,试过**阶段项排两列** → 截图发现编号被 grid
按行填充排成 `1/3/5 · 2/4/6`,线性流程顺序全乱。已回退单列,
并把这条教训写进 CSS 注释(免得后人再试一次)
- 图 5 触发条件框删掉小字后留白偏大 → 高度 56→42
## 验证
- 三档宽度(1440/768/390):无横向溢出、回边徽标与阶段项**零重叠**、
文字未被截断
- 深浅双主题 / JS 禁用 / reduce 回归全绿;控制台零错误
- 死 CSS 计数全部归零;「分诊」全站残留 0
- CSS 括号平衡,文件 141,847 字节(原 143,960,净减 2.1KB)
---
site/index.html | 116 +++++++++++++++---------------------------------
1 file changed, 35 insertions(+), 81 deletions(-)
diff --git a/site/index.html b/site/index.html
index 6471b05e..4631937c 100644
--- a/site/index.html
+++ b/site/index.html
@@ -426,16 +426,6 @@
color: var(--text-dim);
}
.duty p strong { color: var(--brand-cyan); font-weight: 700; }
- .duty-ev {
- display: inline-block;
- font-family: var(--font-mono);
- font-size: 0.72rem;
- line-height: 1.5;
- color: var(--text-muted);
- padding-top: 0.7rem;
- border-top: 1px solid var(--border);
- width: 100%;
- }
@media (max-width: 860px) {
.duties { grid-template-columns: 1fr; gap: 0.8rem; }
}
@@ -538,15 +528,6 @@
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='0.5'/%3E%3C/svg%3E");
}
.alt-visual svg { position: relative; z-index: 1; width: 100%; height: auto; display: block; }
- .dv-note {
- position: relative;
- z-index: 1;
- margin: 0.55rem 0 0;
- text-align: center;
- font-size: 0.74rem;
- color: var(--text-muted);
- font-family: var(--font-mono);
- }
@media (max-width: 860px) {
.alt { grid-template-columns: 1fr; gap: 1.6rem; margin-top: 2.6rem; }
/* 窄屏位移收小:单列时左右各 42px 会让内容显得跳,也更容易探出视口 */
@@ -738,7 +719,6 @@
.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; }
@@ -801,7 +781,7 @@
}
.js-fx .dv-sweep { animation: shmSweep 2.8s cubic-bezier(.4,0,.2,1) infinite; }
- /* 收货闪光(图 5):分诊助手接到消息时亮一下 */
+ /* 收货闪光(图 5):驻留子 agent 接到消息时亮一下 */
.dv-recv {
fill: none;
stroke: var(--brand-cyan);
@@ -914,7 +894,6 @@
/* 两列标题 */
.dv-colcap { fill: var(--text-dim); font-size: 10px; text-anchor: middle; letter-spacing: 0.04em; }
.dv-colcap-dim { fill: var(--text-muted); }
- .dv-caps { fill: var(--text-muted); font-size: 8.8px; text-anchor: middle; }
@media (prefers-reduced-motion: no-preference) {
/* 只呼吸透明度,不动 r。
为何:.dv-pkdot 现在兼做「沿链路行进的数据包」(靠 SMIL 的
@@ -1096,9 +1075,10 @@
.loop {
position: relative;
z-index: 1;
- max-width: 34rem;
+ width: fit-content;
+ min-width: 21rem;
margin: 0.5rem auto 0;
- padding: 1.7rem 1rem 1.9rem;
+ padding: 1.7rem 1.6rem 2.4rem;
border: 1px dashed rgba(6, 182, 212, 0.4);
border-radius: var(--radius-md);
background: rgba(6, 182, 212, 0.045);
@@ -1114,6 +1094,8 @@
border: 1px solid rgba(6, 182, 212, 0.4);
border-radius: var(--radius-pill);
}
+ /* 单列。曾试过两列填满宽度,但 grid 按行填充会把编号排成
+ 1/3/5 · 2/4/6 —— 这是线性流程,顺序不能乱。 */
.seq {
list-style: none;
margin: 0;
@@ -1171,24 +1153,12 @@
line-height: 1;
}
- .flow-note {
- position: relative;
- z-index: 1;
- margin: 1.1rem auto 0;
- max-width: 34rem;
- text-align: center;
- font-size: 0.76rem;
- color: var(--text-muted);
- line-height: 1.6;
- }
- .flow-note code { font-size: 0.74rem; }
-
/* 窄屏:中轴线收边,节点撑满 */
@media (max-width: 620px) {
.flow { padding: 1.2rem 1rem 1.1rem; }
.flow::before { display: none; }
.n { width: auto; max-width: none; }
- .br, .flow-note { max-width: none; }
+ .br { max-width: none; }
.loop { max-width: none; padding: 2.2rem 0.8rem 2.4rem; }
.lnk { height: 1.6rem; }
}
@@ -2068,29 +2038,25 @@
插件不在内核里,是另一个进程。崩了就把它注册的东西一并摘掉,其余照跑。 插件不在内核里,是另一个进程。崩了就把它注册的东西一并摘掉,其余照跑。重启退避 1s / 2s / 3s,5 分钟内第 4 次崩溃则停下等人。 输入分能等与不能等。不能等的可抢占,被打断的现场压栈,稍后原样恢复。 输入分能等与不能等。不能等的可抢占,被打断的现场压栈,稍后原样恢复。L4 内核独占,外部插件声明 L4 会被夹到 L3。 控制走 stdio,数据走共享内存,通知走事件环。变长内容只传偏移,两边映射到不同地址也能读。 控制走 stdio,数据走共享内存,通知走事件环。变长内容只传偏移,两边映射到不同地址也能读。实测整段写入 + 读回 3.5µs。 上下文按相关性取舍,最近 10 条恒受保护。低分下沉成文档,冷文档再蒸馏成三元组。 上下文按相关性取舍,最近 10 条恒受保护。低分下沉成文档,冷文档再蒸馏成三元组。有效工作区间上限 60 万 token。崩一个,不赔上全部
- 拦得住,也接得回
- 三条道,各走各的
- 记忆不会越用越肿
-
实测:statically linked,无动态依赖
@@ -2371,7 +2336,6 @@实测整段写入+读回 3.5µs
@@ -2438,7 +2402,7 @@pre_action
- 构建消息与工具表 · 插件可在此短路pre_actionpost_action
- 插件可改写最终文本post_actionbefore_toolcall
- 逐个工具执行前 · 可拒before_toolcallafter_toolcall
- 上下文裁剪 · 相关记忆召回 · 结果入消息after_toolcall
- on_input 在进管道之前跑;before_output / after_output 在全部轮次结束后跑一次。
-
- 这正是「分诊助手」的用途。主 agent 忙超阈值(默认 5 分钟)且积压够多(默认 3 条) + 这正是驻留子 agent 的用途。主 agent 忙超阈值(默认 5 分钟)且积压够多(默认 3 条) 时,内核可拉起临时驻留子接手:能办的直接办,需要主 agent 的立刻回「忙碌中,请稍候」。 这个自动转投默认关闭,由部署方显式打开 —— 它属于「内核替父做决策」,与 「显式才是特权」同一条理由。