JianFeeeee
1816a837ec
fix(agent)★★: 会话作用域拒绝文案不再拼出「你当前在会话 。」
2026-10-05,比对 MCP 与插件接入能力时实测发现。
## 症状
独立 MCP 宿主读自己刚收到的那封信,得到:
这封信不在你当前所在的那条会话里:…你当前在会话 。要读它,…
`你当前在会话 。` 中间是空的。
## 根因:一个 reason 值管三种拒绝,文案却只有一句
`AgentMayReadSession` 用**同一个 `reason`** 覆盖三种情形:
① 没声明 session_id(scope == nil)
② 声明了别人的会话
③ 声明了但**不是参与方**(session_id 由请求方提供,自述不是事实)
而 `canReadSession` 无条件拼 `"你当前在会话 " + self + "。"`,
于是 ① 拼出那句残缺文案。
★ 为什么这句残缺文案比「不说」更糟:模型读到「你当前在会话 。」
会以为自己在一个**无名会话**里,于是转去猜/去搜 ——
而正确做法(从 new_mail 事件取 session_id)就在同一句话的后半段,
它却读不到前半段。
## 修法
按 `scope` 有无分句,**不给空值留位置**:
① → 「你当前**没有**声明自己所在的那条会话,所以无从判断这封信是不是你的。」
② → 「你当前在会话 00000000-…」(仍只报自己声明的那条)
②③ 故意不拆开:`session_workspace.go:171` 已经警告过「新增 reason 还要同步改
handler 的 switch,漏改就是 500」,而两者给模型的指引**完全相同**
(都是"去那条会话读"),拆开只增加分支不增加信息。
## 实测(真实请求,部署后)
① 不声明 → 「你当前**没有**声明自己所在的那条会话…」 无残缺 ✓
② 声明他人 → 「你当前在会话 00000000-…」(自己声明的那条)✓
★ 「会话 。」残缺句已消失
## 判据
`TestSessionScopeHintNeverLeavesEmptySessionSlot` —— 盯**结构**而非文案本身:
- 禁止再出现 `"你当前在会话 "+self+"。` 这种无条件拼接
- 要求按 `scope != nil` 分句
- 要求存在「未声明会话」那一句
两个变异都转红:退回无条件拼接 / 删掉「未声明」那句。
## 顺带确认:MCP 与插件的工具面已对齐
实测 `tools/list`(11 个)与 4 个插件的真实注册项做集合比对:
MCP 有、插件没有: 无
插件有、MCP 没有: 无
⚠️ 中途差点误判:grep 到插件里有 `permission_decision` 等 3 个词,
以为 MCP 缺 3 个工具。查下去 `permission_decision` 是 **mail_type**
(收到授权请求邮件后转给 worker),另两个只存在于 `src/pool.mjs`
和测试里,**从不暴露给模型**。
2026-10-05 10:22:46 +08:00
..
2026-10-02 16:06:00 +08:00
2026-10-04 12:03:58 +08:00
2026-09-08 19:16:35 +08:00
2026-10-02 01:09:19 +08:00
2026-10-05 10:22:46 +08:00
2026-09-26 07:44:33 +08:00
2026-09-08 19:16:35 +08:00
2026-09-14 08:32:22 +08:00
2026-09-14 08:32:22 +08:00
2026-09-08 19:16:35 +08:00
2026-09-08 19:16:35 +08:00
2026-09-11 15:49:26 +08:00
2026-09-08 19:16:35 +08:00
2026-09-08 19:16:35 +08:00
2026-09-08 19:16:35 +08:00
2026-10-05 09:26:59 +08:00
2026-10-05 09:26:59 +08:00
2026-10-05 09:26:59 +08:00
2026-09-08 19:16:35 +08:00
2026-09-08 19:16:35 +08:00
2026-10-05 09:26:59 +08:00
2026-10-05 09:26:59 +08:00
2026-10-05 09:26:59 +08:00
2026-10-01 20:19:47 +08:00
2026-09-25 05:50:08 +08:00
2026-10-04 17:08:15 +08:00
2026-10-04 12:03:58 +08:00
2026-09-08 19:16:35 +08:00
2026-09-11 22:02:25 +08:00
2026-09-25 06:35:53 +08:00
2026-09-11 23:22:53 +08:00
2026-09-28 11:12:59 +08:00
2026-10-05 09:26:59 +08:00
2026-10-05 09:26:59 +08:00
2026-10-05 09:26:59 +08:00
2026-10-02 10:02:35 +08:00
2026-10-04 17:08:15 +08:00
2026-09-08 19:16:35 +08:00
2026-09-08 19:16:35 +08:00
2026-10-05 09:26:59 +08:00
2026-10-03 13:41:02 +08:00
2026-10-05 09:26:59 +08:00
2026-10-05 10:22:46 +08:00
2026-10-04 12:03:58 +08:00
2026-10-04 12:03:58 +08:00
2026-10-04 12:03:58 +08:00
2026-10-04 12:03:58 +08:00
2026-09-08 19:16:35 +08:00
2026-09-08 19:16:35 +08:00
2026-10-05 09:26:59 +08:00
2026-09-08 19:16:35 +08:00
2026-09-25 16:29:19 +08:00
2026-09-25 16:29:19 +08:00
2026-09-12 11:19:19 +08:00
2026-09-12 11:19:19 +08:00