Commit Graph

4 Commits

Author SHA1 Message Date
a8d6811cd7 style(server): gofmt 注释规范 + init.sql 补 parent_session_id + 新增 ratelimit 判据
## 主体是 gofmt

`server/` 下 20 个文件的改动里,**142/147 行是注释与缩进** ——
Go 1.19+ 的 gofmt 把块注释里的 `//   x` 规范成 `//\tx`。
功能零变化。

## 一处实质:init.sql 补 parent_session_id

`ALTER TABLE sessions ADD COLUMN IF NOT EXISTS parent_session_id
 TEXT REFERENCES sessions(session_id)`

远端已在 `db/migrate.go` 的 `sqliteAddColumns` 结构迁移通道里加了同一列;
init.sql 是**全新库**的建库脚本,缺这列会让新库少一个字段。

- `IF NOT EXISTS` ⇒ 与结构迁移通道幂等,两者并存无害
- 默认空 = 根节点;**不据历史数据猜父子**(猜错会让线索拓扑失真,比没有更糟)

## 新增 handler/ratelimit_test.go(162 行)

速率限制的判据。此前这一块没有独立判据。

## 验证(本机实跑,非推断)

    go build ./...                              通过
    go vet ./internal/{handler,repo,db,sse}/   通过
    go test -count=1(handler/repo/db/sse/blob)
      handler  41.3s  ok
      repo    101.9s  ok
      db       1.1s  ok
      sse      0.01s ok
      blob     0.08s ok

`-count=1` 是刻意的:第一遍跑出来全是 `(cached)`,那种绿灯不算数。
2026-10-05 09:26:59 +08:00
d9d81b94b1 fix(forward): 引用里的「转发自」不再是 name@name,改用会话的 workspace/alias 拼
用户(指着转发出来的那封信):「这个 zcode@zcode 转发生成的地址绝对有问题,原本是 zcode@/home…」

成因是**两个错叠在一起**:
  ① 写入侧遗留:发信路径给 Agent 存 from_workspace 存的是 **agent 名**而不是路径
     (实测近两天:zcode 10 封全是 'zcode'、homeagent 'homeagent'、opencode 'opencode';
      pi 399 封有 4 种值、dsh 116 封有 3 种 —— 混着真实路径与自己的名字);
  ② 展示侧无脑拼 `name@from_workspace` ⇒ 两者一乘就是 `zcode@zcode`,
     而**那永远不是一个地址**(地址是 name@path.session)。
被转发那封的会话工作区其实是 `/home`、别名 `zcode-打个招呼`,所以正确形式是
`zcode@/home.zcode-打个招呼`(用户说的"原本是 zcode@/home…"就是这个)。

改法:
- quoteBody 增加两个入参(会话 workspace/alias),转发处理器用
  repo.SessionWorkspaceOf / SessionAliasOf 取(都是既有函数,空串语义是"不知道");
- 新增 senderAddress:优先用会话的 workspace+alias 拼 `name@path.session`
  (空 path 时给平台形式 `name@.alias`);**path 与 name 相同时当"不知道"丢掉** ——
  宁可只渲染 `zcode`,也不渲染一个看着像地址其实不是的东西。

判据:新增 TestQuoteBodySenderAddressNeverNameAtName(三条形态:正常地址 / 退化不许 name@name /
空 path 的 .alias 形式);旧的 TestQuoteBodyPrefixesEveryLine 改走退化路径以保持它原本的意图。
变异:去掉"拒绝 name@name"那段 → 红;复原 → 包内全绿。

▲ 仍未部署(与上一笔时间修复一起卡在同一个地方):/opt/agentmail 现在对我不可写
(touch 都被拒),且有 08:57 留下的 /opt/agentmail/.deploy.lock。
需要能写那儿的人:rm -f /opt/agentmail/.deploy.lock && bash deploy/redeploy-gateway.sh
2026-09-15 09:38:59 +08:00
7ff20feffe fix(forward): 转发引用里的「时间」按本地时区渲染(原先是 UTC 原样)
用户(转发 zcode 的信给我):「它说的它发的这个邮件你收到了吗?它说没有收到回复……」——
问题不在那封信,而在它引用的时间:用户看到的「2026-09-15 01:23:19」其实是 UTC,
本地时间应为 09:23:19(本机 UTC+8)。

根因:quoteBody 用 `m.CreatedAt.Format(...)` 直接格式化(库里存 UTC),而界面各处都转本地;
同一族的正确写法在 scheduler/calendar.go 里(`e.EventTime.Local().Format(...)`)。

★ 顺带发现一条**旧断言一直在保护这个 bug**:TestQuoteBodyPrefixesEveryLine 里写死了
「2026-09-02 10:30:00」(fixture 是 time.UTC)——已改为按本地计算,不再写死字面量
(与前几天 nav-merge.test.mjs 那条同一形态:断言钉着错的意图)。

判据:新增 TestQuoteBodyTimeIsLocal(引用时间必须等于 CreateAt.Local() 渲染,且不得等于
UTC 原样)。变异:去掉 .Local() → 2 条判据变红(新加的 + 改过的旧断言);复原 → 包内全绿。
注:该判据在 TZ=UTC 的机器上是空转的(本地==UTC),本机 UTC+8 会真红。

▲ 部署未完成:/opt/agentmail 现在对我不可写(touch 都被拒;uid/能力问题,08:57 之后出现),
加上一个 08:57 留下的陈旧 /opt/agentmail/.deploy.lock 挡在 redeploy-gateway.sh 前面。
需要能写那里的人跑:rm -f /opt/agentmail/.deploy.lock && bash deploy/redeploy-gateway.sh
2026-09-15 09:36:47 +08:00
f9d757b5e5 chore: directory migration - gateway→server, web→client/electron 2026-09-08 19:16:35 +08:00