9c8dbfde35
- buildStepLine: кратко «спросил -> ответил» (служебные строки экономия/coverage/вердикт отброшены) - protocol.steps: хук ведёт по строке на КАЖДЫЙ ход; рендер — список + одна ссылка raw в конце - reconcile (stampProvenance) сохраняет steps (модель их не трогает) - stop-хук добавляет шаг текущего хода 41 тест green, exit=0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
34 lines
1.6 KiB
JavaScript
34 lines
1.6 KiB
JavaScript
import { describe, it, expect } from 'vitest';
|
|
import { buildRawRecord, buildStepLine } from './secretary-layer1.mjs';
|
|
|
|
describe('buildRawRecord', () => {
|
|
it('содержит заголовок с turn, реплики и действие', () => {
|
|
const rec = buildRawRecord({
|
|
turn: 7, time: '2026-06-22T10:00:00Z', session: 'abc',
|
|
user: 'привет', assistant: 'ответ',
|
|
actions: [{ tool: 'Read', input: '{"f":"x"}', result: 'текст' }],
|
|
});
|
|
expect(rec).toContain('turn=7');
|
|
expect(rec).toContain('[ЮЗЕР]');
|
|
expect(rec).toContain('[ДЕЙСТВИЕ] Read');
|
|
expect(rec.trim().endsWith('=== КОНЕЦ ХОДА ===')).toBe(true);
|
|
});
|
|
it('без действий — блок без [ДЕЙСТВИЕ]', () => {
|
|
const rec = buildRawRecord({ turn: 1, time: 't', session: 's', user: 'u', assistant: 'a' });
|
|
expect(rec).not.toContain('[ДЕЙСТВИЕ]');
|
|
});
|
|
});
|
|
|
|
describe('buildStepLine', () => {
|
|
it('кратко: спросил → ответил, без служебных строк', () => {
|
|
const s = buildStepLine({ turn: 5, user: 'сделай флажок по сессии', assistant: 'экономия: 100%\nГотово, сделал флажок' });
|
|
expect(s).toContain('Ход 5');
|
|
expect(s).toContain('сделай флажок по сессии');
|
|
expect(s).toContain('Готово, сделал флажок');
|
|
expect(s).not.toContain('экономия');
|
|
});
|
|
it('пустой вопрос → (без вопроса)', () => {
|
|
expect(buildStepLine({ turn: 2, user: '', assistant: 'a' })).toContain('(без вопроса)');
|
|
});
|
|
});
|