2026-06-22 05:59:28 +03:00
|
|
|
|
import { describe, it, expect } from 'vitest';
|
|
|
|
|
|
import { parseLastExchange } from './secretary-transcript.mjs';
|
|
|
|
|
|
|
|
|
|
|
|
describe('parseLastExchange', () => {
|
|
|
|
|
|
it('тащит последний user + assistant + действия', () => {
|
|
|
|
|
|
const t = [
|
|
|
|
|
|
JSON.stringify({ message: { role: 'user', content: 'старое' } }),
|
|
|
|
|
|
JSON.stringify({ message: { role: 'user', content: 'привет' } }),
|
|
|
|
|
|
JSON.stringify({ message: { role: 'assistant', content: [
|
|
|
|
|
|
{ type: 'text', text: 'ответ' },
|
|
|
|
|
|
{ type: 'tool_use', name: 'Read', input: { f: 'x' } },
|
|
|
|
|
|
] } }),
|
|
|
|
|
|
].join('\n');
|
|
|
|
|
|
const ex = parseLastExchange(t);
|
|
|
|
|
|
expect(ex.user).toBe('привет');
|
|
|
|
|
|
expect(ex.assistant).toBe('ответ');
|
|
|
|
|
|
expect(ex.actions).toEqual([{ tool: 'Read', input: '{"f":"x"}' }]);
|
|
|
|
|
|
});
|
|
|
|
|
|
it('строковый content тоже понимает; битые строки пропускает', () => {
|
|
|
|
|
|
const t = ['не-json', JSON.stringify({ message: { role: 'user', content: 'у' } }),
|
|
|
|
|
|
JSON.stringify({ message: { role: 'assistant', content: 'а' } })].join('\n');
|
|
|
|
|
|
const ex = parseLastExchange(t);
|
|
|
|
|
|
expect(ex.user).toBe('у');
|
|
|
|
|
|
expect(ex.assistant).toBe('а');
|
|
|
|
|
|
expect(ex.actions).toEqual([]);
|
|
|
|
|
|
});
|
2026-06-22 07:21:09 +03:00
|
|
|
|
it('пропускает tool_result (role:user) — берёт настоящий промпт + все действия', () => {
|
|
|
|
|
|
const t = [
|
|
|
|
|
|
JSON.stringify({ message: { role: 'user', content: 'настоящий вопрос' } }),
|
|
|
|
|
|
JSON.stringify({ message: { role: 'assistant', content: [
|
|
|
|
|
|
{ type: 'text', text: 'думаю' }, { type: 'tool_use', name: 'Read', input: { f: 'a' } }] } }),
|
|
|
|
|
|
JSON.stringify({ message: { role: 'user', content: [{ type: 'tool_result', content: 'результат' }] } }),
|
|
|
|
|
|
JSON.stringify({ message: { role: 'assistant', content: [{ type: 'text', text: 'готово' }] } }),
|
|
|
|
|
|
].join('\n');
|
|
|
|
|
|
const ex = parseLastExchange(t);
|
|
|
|
|
|
expect(ex.user).toBe('настоящий вопрос');
|
|
|
|
|
|
expect(ex.assistant).toContain('думаю');
|
|
|
|
|
|
expect(ex.assistant).toContain('готово');
|
|
|
|
|
|
expect(ex.actions).toEqual([{ tool: 'Read', input: '{"f":"a"}' }]);
|
|
|
|
|
|
});
|
2026-06-22 05:59:28 +03:00
|
|
|
|
});
|