/** * read_inbox 必须收窄到**自己那条会话**(用户:「你还是没修好不同 session agent * 收件箱隔离的问题」)。 * * zcode 的特殊之处:一轮一个进程,驱动已经把本轮邮件会话注入 AGENTMAIL_SESSION_ID * (授权钩子本来就用它)⇒ 直接读 env 即可,天然并发安全。 */ import { test } from 'node:test'; import assert from 'node:assert/strict'; import { readFileSync } from 'node:fs'; import { dirname, join } from 'node:path'; import { fileURLToPath } from 'node:url'; const HERE = dirname(fileURLToPath(import.meta.url)); const tools = readFileSync(join(HERE, '..', 'lib', 'tools.mjs'), 'utf8'); const index = readFileSync(join(HERE, '..', 'src', 'index.mjs'), 'utf8'); test('驱动确实注入了本轮邮件会话', () => { assert.match(index, /AGENTMAIL_SESSION_ID: sessionId/, '驱动要把邮件会话传下去'); }); test('read_inbox 会拼上会话收窄,且在调用时读 env', () => { assert.match(tools, /const mailSessionID = process\.env\.AGENTMAIL_SESSION_ID \|\| ''/, '调用时读(不是 import 时读死)'); assert.match(tools, /mail\/inbox\?status=\$\{encodeURIComponent\(status\)\}&limit=\$\{limit\}\$\{scope\}/); assert.match(tools, /session_id=\$\{encodeURIComponent\(mailSessionID\)\}/); }); test('★ 判据自检:旧写法(不带 env、不带 scope)必须判红', () => { const old = '`/mail/inbox?status=${encodeURIComponent(status)}&limit=${limit}`'; assert.ok(!/\$\{scope\}/.test(old)); assert.ok(!/AGENTMAIL_SESSION_ID/.test(old)); });