fix(mail)!: agent 发信不再把 agent 名当工作区存进 from_workspace
用户报「这个 zcode@zcode 转发生成的地址绝对有问题」的**写入侧根因**: mail.go 的 agent 发信路径传的是 `agentName, agentName` —— 第二个参数是 from_workspace, 于是近两天 zcode 10 封、homeagent/opencode 全部把**自己的名字**存成了工作区 (人类路径 me.go 那一格是空串,所以只有 agent 的信这样;pi 399 封有 4 种值、dsh 116 封 3 种 则是历史与真实路径混着的状态)。 改法(一处):from_workspace = 该会话的工作区 —— 地址里带了 path 就用它, 否则回查 SessionWorkspaceOf(空串语义是「不知道」);再兜一层"等于 agent 名就置空"。 配套的显示侧修复(d9d81b9)已让 `name@name` 不再出现,并对**存量**行生效 (path==name 时当"不知道"丢弃,改用会话反查)——所以历史数据不需要回填。 生产实测(部署后新写入一封): 修复前该格 = "pi"(或 "zcode");现在 = "/home/program/agentmail"(会话工作区) 判据:显示侧 TestQuoteBodySenderAddressNeverNameAtName 已钉住引用块; 本改动为写入侧,用**线上真发一封 + 读库对照**验证(handler 包无发信测试夹具, 不硬加一条只钉形状的假判据)。
This commit is contained in:
@ -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 != "" {
|
||||
|
||||
Reference in New Issue
Block a user