diff --git a/site/index.html b/site/index.html index 6471b05..4631937 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 次崩溃即停下等人 +

插件不在内核里,是另一个进程。崩了就把它注册的东西一并摘掉,其余照跑。重启退避 1s / 2s / 3s,5 分钟内第 4 次崩溃则停下等人。

调度

拦得住,也接得回

-

输入分能等与不能等。不能等的可抢占,被打断的现场压栈,稍后原样恢复

- L4 内核独占;外部插件声明 L4 会被夹到 L3 +

输入分能等与不能等。不能等的可抢占,被打断的现场压栈,稍后原样恢复。L4 内核独占,外部插件声明 L4 会被夹到 L3。

通信

三条道,各走各的

-

控制走 stdio,数据走共享内存,通知走事件环。变长内容只传偏移,两边映射到不同地址也能读。

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

控制走 stdio,数据走共享内存,通知走事件环。变长内容只传偏移,两边映射到不同地址也能读。实测整段写入 + 读回 3.5µs。

资源

记忆不会越用越肿

-

上下文按相关性取舍,最近 10 条恒受保护。低分下沉成文档,冷文档再蒸馏成三元组。

- 有效工作区间上限 60 万 token +

上下文按相关性取舍,最近 10 条恒受保护。低分下沉成文档,冷文档再蒸馏成三元组。有效工作区间上限 60 万 token。

@@ -2280,7 +2246,6 @@ 都不需要 -

实测:statically linked,无动态依赖

@@ -2371,7 +2336,6 @@ 零拷贝:不序列化、不复制 -

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

@@ -2438,7 +2402,7 @@ 先到先处理 - 任何中断都能插它前面 + @@ -2448,7 +2412,7 @@ 正在跑的任务 同一时刻只一个 - 被打断的现场压入中断栈,稍后原样恢复 + @@ -2508,10 +2472,10 @@ - - 触发条件 - 忙超 5 分钟 · 积压 ≥ 3 条 - 默认关闭,需部署方打开 + + 触发条件 + 忙超 5 分钟 · 积压 ≥ 3 条 + @@ -2523,12 +2487,11 @@ 积压消息 ×2 - + - 分诊助手 - 临时驻留子 - 当场办 / 立刻答 + 驻留子 agent + 当场办 / 立刻答 @@ -2553,7 +2516,7 @@ 用户 - 不必干等 + @@ -2670,7 +2633,7 @@
  • 同级不抢占 → 入队列排队
  • 更高级别抢占,现场压入中断栈,稍后恢复
  • -
  • 忙得太久转投临时分诊助手
  • +
  • 忙得太久转投驻留子 agent
@@ -2687,33 +2650,27 @@
  1. 1 -
    pre_action - 构建消息与工具表 · 插件可在此短路
    +
    pre_action
  2. 2 -
    LLM 调用 - provider 回退 + 瞬时错误重试 · 流式累积
    +
    LLM 调用
  3. 3 -
    post_action - 插件可改写最终文本
    +
    post_action
  4. 4 -
    before_toolcall - 逐个工具执行前 · 可拒
    +
    before_toolcall
  5. 5 -
    执行工具 - 临界区:副作用不可回滚
    +
    执行工具
  6. 6 -
    after_toolcall - 上下文裁剪 · 相关记忆召回 · 结果入消息
    +
    after_toolcall
-

- on_input 在进管道之前跑;before_output / after_output 在全部轮次结束后跑一次。 -

@@ -2760,10 +2714,10 @@
-
36
在跑插件
16 内置 + 20 外部
-
340
可用工具
实测注册数
-
109k
Go 代码行
不含第三方
-
9
LLM 适配器
另有 1 个网关脚本
+
36
在跑插件
+
340
可用工具
+
109k
Go 代码行
+
9
LLM 适配器
@@ -2966,7 +2920,7 @@ echo "你好,记住我喜欢喝咖啡" | ./build/waiter
长任务会不会让用户等很久?

- 这正是「分诊助手」的用途。主 agent 忙超阈值(默认 5 分钟)且积压够多(默认 3 条) + 这正是驻留子 agent 的用途。主 agent 忙超阈值(默认 5 分钟)且积压够多(默认 3 条) 时,内核可拉起临时驻留子接手:能办的直接办,需要主 agent 的立刻回「忙碌中,请稍候」。 这个自动转投默认关闭,由部署方显式打开 —— 它属于「内核替父做决策」,与 「显式才是特权」同一条理由。