diff --git a/server/internal/handler/mail.go b/server/internal/handler/mail.go index 7a70742..4346b6e 100644 --- a/server/internal/handler/mail.go +++ b/server/internal/handler/mail.go @@ -439,8 +439,20 @@ func SendMail(w http.ResponseWriter, r *http.Request) { // 上一秒记住的地址下一秒失效。真正改名要等用户在前端点「接受」。 proposal, body := extractRenameProposal(req.Body) + // ★ 2026-09-15:这里原先传的是 `agentName, agentName` —— 把 **agent 名当成了工作区** + // 存进 from_workspace(人类路径 me.go 那一格是空串,所以只有 agent 的信这样)。 + // 后果:转发引用块拼出 `zcode@zcode`(用户报「这个地址绝对有问题」), + // 而且"发件人当时在哪工作"这个事实被一个名字覆盖掉了。 + // 正确值 = 该会话的工作区:地址里带了 path 就用它,否则回查会话(空串语义是"不知道")。 + fromWorkspace := to.Path + if fromWorkspace == "" { + fromWorkspace = repo.SessionWorkspaceOf(r.Context(), sessionID) + } + if fromWorkspace == agentName { + fromWorkspace = "" // 再兜一层:宁可空,也不把名字当路径 + } mailID, err := repo.CreateMail(r.Context(), sessionID, parentMailID, - agentName, agentName, to.Name, to.Path, req.Subject, body, ccList) + agentName, fromWorkspace, to.Name, to.Path, req.Subject, body, ccList) if err != nil { // 建邮件失败时必须把幂等键还回去,否则这条上游消息永远转不出来了 if relay != "" {