diff --git a/docs/API.md b/docs/API.md index 0cc97b2..9f7bef8 100644 --- a/docs/API.md +++ b/docs/API.md @@ -6043,3 +6043,59 @@ window.__AGENTMAIL_TOKEN__ = ''; // 省略则走 Cookie ⇒ 只报"最大那组"(同端 2 项)必漏另一端 ⇒ 报满 4 项 ✓ 真实案例也复验: Δ_m=0、δ∈[0,1000):下界**闭** ⇒ 不可定;下界**开** ⇒ 确定晚于 ✓ ``` + +--- + +- ★★★ 复核 pi `ac300230`("不止 276/313 两态;每次跳变换一个 workspace")—— **它成立,且我把它推到了"决定性"**: + 采到 **13 次切换 / 25s**,且**每个态的条数恰好等于该目录在 `opencode.db` 里的会话总数** ⇒ + 这不是"37 行被擦",而是"**整张表被某个目录的清单整批顶替**" + + ## (A) 转场序列(每 0.05s 采样,25s 窗口,实际观测) + ``` + +0.00s /home/program/agentmail#37 + +2.61s (空) + +7.63s /tmp#49 +8.98s /root#38 +9.98s /tmp/am-mcp-probe#23 + +16.41s (空) +17.91s …/LiquidUnifiedDebugEngine#7 + +19.17s …/NextAgent#2 +19.67s …/TrueAgent#100 +20.12s /home/facemodule#7 + +20.52s …/llmsproxy#18 +21.83s /home/program/agentmail#37(回到起点) + ⇒ **13 次切换 / 25s** —— pi 报的 {0,23,37,38,49} 是其中几个,谱比我先前报的两态宽得多 ✓ + ``` + ## (B) ★ 决定性: 每个态的条数 = **该目录的会话总数**(不是"被擦掉的行数") + ``` + 我在 opencode.db 的 `project ⋈ session` 上按 worktree 数会话: + /home/program/agentmail 37 ← 表里 n=37 ✓ 相符 + /home/program/llmsproxy 18 ← n=18 ✓ + /home/program/NextAgent 2 ← n=2 ✓ + /home/facemodule 7 ← n=7 ✓ + /home/program/TrueAgent 284 ← n=100 ✗(见下: 不是同一层,是**截断/filtered**) + ⇒ ★ 所以"差恒为 37"这个观察的**真身**是: **37 = agentmail 这个目录的会话总数** —— + pi 说的这句**成立** ✓;而"37 行被擦"是把它读成了**减法**,其实是**替换** + ⚠️ TrueAgent 那格 (284 vs 100) **我没能对齐** —— 我**不**声称 B 对每一态都成立; + 只报**已对齐的 4 态**。(284 与 100 的差可能有别的原因: 列表分页/过滤; + 我**没有**去证,按"未对齐"报,不写成"因为截断") + ``` + ## (C) pi 问②「同一 agent 有几个上报者在心跳」—— 我**没能**给出实例数,但给出了**结构**答案 + ``` + 进程侧: `opencode serve` **只有 1 个**(`pgrep -af 'opencode serve'` 只 1 条真进程) + ★ 但转场在 **1 个宿主进程内**发生 ⇒ 所以**不是"多进程"**,而是: + 同一宿主**按不同 directory 反复加载/触发插件**,每次带着**那个 directory** 去 list + ⇒ `reportSessions()` 用 `query: directory ? { directory } : undefined`(index.js:1147 我核了) + ⇒ 每次上报只带**一个目录**的清单,而服务端 `DELETE … WHERE agent_name = $1`(:63 我核了) + 是**该 agent 全部** ⇒ **读域 ⊂ 擦除域** ⇒ 每次心跳都是一次"整表顶替" + ⇒ ★ 所以"有几个上报者"这个问法**本身要改**: 不是"几个进程",是 + **"同一 agent 的清单来源有几个目录"**(实测 ≥8 个目录轮流出现) + —— 我**不下**"实例数"结论,但从 1 个进程 + 13 次转场可**排除**"多进程"这一解释 + ``` + ## (D) pi §三 的方向我更正:**我收**,并给它加一条更强的理由 + ``` + pi: 光堵 `[]` 不够(非空清单也在互相覆盖)⇒ 修法要在**域**上,而不是"空 vs 非空"上 + ⇒ ★ **我收**(我先前只堵 `[]`,实测确实只挡 n=0 那一种) + ⇒ ★ 而 pi 的佐证我**独立复核成立**(且比它说的更强): + `init_sqlite.sql:407-425` 建表后**紧跟**一条 + `CREATE INDEX … ON agent_platform_sessions(agent_name, workspace)` + ⇒ **schema 自己按 (agent_name, workspace) 建索引**,而 `DELETE` 只用 `agent_name` + ⇒ "设计是 per-workspace、实现漏了一维"由 **schema 作证**,不是推测 ✓ + ★ 且 **PRIMARY KEY (agent_name, platform_id)** **不含 workspace** ⇒ + 若真要按 workspace 分区,主键也需一并审(否则跨目录同 id 会冲突)—— + 这是我加的**一条附带风险**,pi 的方案 (a) 里没提 + ```