mirror of
https://github.com/hansjone/dsh-im-ops.git
synced 2026-10-10 18:03:18 +08:00
48 lines
1.8 KiB
JavaScript
48 lines
1.8 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
|
|
import { HarnessReplyTracker } from '../../../src/channels/weixin/harness-client.mjs';
|
|
|
|
test('reply tracker associates only the Harness turn created by the Weixin prompt RPC', () => {
|
|
const tracker = new HarnessReplyTracker({ promptRpcId: 'weixin-prompt', afterSeq: 2 });
|
|
const first = tracker.consume([
|
|
{ event: { seq: 3, type: 'turn/start', data: { turn: 9 } } },
|
|
{ event: {
|
|
seq: 4,
|
|
type: 'user/message',
|
|
data: { turn: 9, source: { rpcId: 'weixin-prompt' } },
|
|
} },
|
|
{ event: {
|
|
seq: 5,
|
|
type: 'assistant/chunk',
|
|
data: { turn: 9, step: 0, chunk: { type: 'text-delta', index: 0, text: '微信' } },
|
|
} },
|
|
]);
|
|
assert.deepEqual(first, { type: 'text', text: '微信' });
|
|
tracker.consume([
|
|
{ event: {
|
|
seq: 6,
|
|
type: 'assistant/message',
|
|
data: { turn: 9, message: { content: [{ type: 'text', text: '微信回复完成' }] } },
|
|
} },
|
|
{ event: { seq: 7, type: 'turn/end', data: { turn: 9, reason: 'completed' } } },
|
|
]);
|
|
assert.equal(tracker.finished, true);
|
|
assert.equal(tracker.answer, '微信回复完成');
|
|
});
|
|
|
|
test('reply tracker ignores interleaved turns and older events', () => {
|
|
const tracker = new HarnessReplyTracker({ promptRpcId: 'target', afterSeq: 10 });
|
|
tracker.consume([
|
|
{ event: { seq: 9, type: 'turn/start', data: { turn: 1 } } },
|
|
{ event: { seq: 11, type: 'turn/start', data: { turn: 2 } } },
|
|
{ event: { seq: 12, type: 'user/message', data: { turn: 2, source: { rpcId: 'other' } } } },
|
|
{ event: {
|
|
seq: 13,
|
|
type: 'assistant/message',
|
|
data: { turn: 2, message: { content: [{ type: 'text', text: 'wrong' }] } },
|
|
} },
|
|
]);
|
|
assert.equal(tracker.answer, '');
|
|
assert.equal(tracker.finished, false);
|
|
});
|