Files
memind/agent-run-stream.test.mjs
T
john 08feae8bef feat(h5-session): Session Broker、run SSE replay 与 Finish 竞态修复
落地 H5 Session 架构 Patch 1–5(Broker 收口、Router decision、SSE taxonomy、goosed 边界检查),
并新增可选 MEMIND_RUN_STREAM_REPLAY run 事件回放与 H5 假交付 guard;修复 Finish 先于 agent-run
gate 导致 UI 永久 loading 的竞态,接入 verify:h5-session-patches 回归脚本。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-06 14:19:48 +08:00

49 lines
1.7 KiB
JavaScript

import assert from 'node:assert/strict';
import test from 'node:test';
import {
extractRunFromStreamEvent,
formatRunStreamSseChunk,
isRunStreamReplayEnabled,
isTerminalRunStatus,
projectRunStreamEvents,
shouldEmitRunUpdateForStreamEvent,
} from './agent-run-stream.mjs';
test('formatRunStreamSseChunk includes SSE id for replay cursor', () => {
const chunk = formatRunStreamSseChunk({
id: 'evt-1',
event: 'run',
data: { run: { id: 'run-1', status: 'running' } },
});
assert.match(chunk, /^id: evt-1\n/);
assert.match(chunk, /event: run\n/);
assert.match(chunk, /"status":"running"/);
});
test('projectRunStreamEvents prefers run_snapshot payloads', () => {
const { emittedRuns, latestRun } = projectRunStreamEvents([
{ id: 'e1', eventType: 'queued', data: null, createdAt: 1 },
{
id: 'e2',
eventType: 'run_snapshot',
data: { run: { id: 'run-1', status: 'running', sessionId: 's1' } },
createdAt: 2,
},
{ id: 'e3', eventType: 'succeeded', data: null, createdAt: 3 },
]);
assert.equal(emittedRuns.length, 2);
assert.equal(latestRun?.sessionId, 's1');
assert.equal(extractRunFromStreamEvent(emittedRuns[0] && {
eventType: 'run_snapshot',
data: { run: emittedRuns[0].run },
})?.sessionId, 's1');
});
test('shouldEmitRunUpdateForStreamEvent covers status and snapshot events', () => {
assert.equal(shouldEmitRunUpdateForStreamEvent('run_snapshot'), true);
assert.equal(shouldEmitRunUpdateForStreamEvent('worker_heartbeat'), false);
assert.equal(isTerminalRunStatus('succeeded'), true);
assert.equal(isRunStreamReplayEnabled({ MEMIND_RUN_STREAM_REPLAY: '0' }), false);
assert.equal(isRunStreamReplayEnabled({ MEMIND_RUN_STREAM_REPLAY: '1' }), true);
});