23 lines
1.6 KiB
JavaScript
23 lines
1.6 KiB
JavaScript
// tools/secretary-slim.mjs
|
|
// Live-only проекция протокола для подачи в LLM: мёртвые ветки/кандидаты («надгробия»)
|
|
// в неё не попадают совсем. Чистая, не мутирует вход. Полный протокол (источник истины)
|
|
// и архив строятся отдельно — здесь только то, что видит агент.
|
|
|
|
// Терминальные статусы ветки = мертва, в подачу не идёт (кандидат: закрыт/отпал/мутировал/повышен).
|
|
const DEAD_BRANCH = new Set(['закрыт', 'отпал', 'мутировал']);
|
|
|
|
/** Ветка жива, если статус не терминальный (нет статуса/«открыт» — живые). */
|
|
export function isLiveBranch(h) { return !DEAD_BRANCH.has(String((h && h.status) || '')); }
|
|
/** Кандидат жив, если без статуса или «жив» (то же, что фильтрует candidatesForPrompt). */
|
|
export function isLiveCandidate(c) { const s = String((c && c.status) || ''); return s === '' || s === 'жив'; }
|
|
|
|
/** Копия протокола только из живого. Вход не мутируется. null/не-объект — как есть. */
|
|
export function slimProtocol(proto) {
|
|
if (!proto || typeof proto !== 'object') return proto;
|
|
return {
|
|
...proto,
|
|
hidden: (proto.hidden || []).filter(isLiveBranch),
|
|
candidates: (proto.candidates || []).filter(isLiveCandidate),
|
|
};
|
|
}
|