Files
brain/tools/secretary-layer1.test.mjs
T
Дмитрий 9c8dbfde35 feat(secretary): раздел «Шаги (Слой 1)» — все ходы человекочитаемо + ссылка на сырьё в конце
- 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>
2026-06-22 11:34:25 +03:00

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('(без вопроса)');
});
});