#!/usr/bin/env node /** * enforce-verdict-surface — UserPromptSubmit-хук (Фикс 1): показывает контроллеру непоказанные * строки исхода судьи/наставника через additionalContext (проверенный канал, как ruflo-recall). * fail-open: любая ошибка → пустой вывод, exit 0. Регистрация в settings.json — шаг владельца. */ import { readStdin, parseEventJson } from './enforce-hook-helpers.mjs'; import { readUnsurfaced, markAllSurfaced } from './verdict-surface-store.mjs'; export function buildVerdictSurfaceOutput(lines) { if (!Array.isArray(lines) || lines.length === 0) return null; const additionalContext = ['Вердикты наставника/судьи (с прошлых записей):', ...lines].join('\n'); return { hookSpecificOutput: { hookEventName: 'UserPromptSubmit', additionalContext } }; } async function main() { try { const event = parseEventJson(await readStdin()); const sessionId = (event && event.session_id) || 'unknown'; const out = buildVerdictSurfaceOutput(readUnsurfaced({ sessionId })); if (out) { process.stdout.write(JSON.stringify(out)); markAllSurfaced({ sessionId }); } } catch { /* fail-open */ } process.exit(0); } import { fileURLToPath } from 'node:url'; const isCli = process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1]; if (isCli) main();