397777089e
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
42 lines
2.2 KiB
JavaScript
42 lines
2.2 KiB
JavaScript
#!/usr/bin/env node
|
||
/**
|
||
* judge-gate-config — рубильник судьи (как resolveJudgeConfig у llm-judge v4).
|
||
* Судья АКТИВЕН только если владелец включил флаг ROUTER_MENTOR_JUDGE_ENABLED=1 И
|
||
* ключ судьи доступен. Без флага/ключа — инертен, $0, ничего не блокирует (режим D28
|
||
* «сперва тихо»). Регистрация хука в settings.json + флаг + ключ — шаг ВЛАДЕЛЬЦА.
|
||
*/
|
||
import { resolveJudgeKey } from './judge-key-config.mjs';
|
||
|
||
const ENABLED_ENV = 'ROUTER_MENTOR_JUDGE_ENABLED';
|
||
|
||
export function resolveJudgeEnabled({ env = process.env } = {}) {
|
||
return env[ENABLED_ENV] === '1';
|
||
}
|
||
|
||
export function judgeActive({ env = process.env, keychainGet } = {}) {
|
||
if (!resolveJudgeEnabled({ env })) return false;
|
||
return !!resolveJudgeKey({ env, keychainGet });
|
||
}
|
||
|
||
/** «Оба строго» (решение владельца 2026-06-12): LLM-ключ судьи — ТОЛЬКО свой
|
||
* ROUTER_JUDGE_LLM_KEY; общий ROUTER_LLM_KEY НЕ фолбэк (разделение счетов).
|
||
* Нет ключа → null → callJudgeModel вернёт unavailable (degraded, не NO-GO). */
|
||
export function resolveJudgeLlmKey({ env = process.env } = {}) {
|
||
return env.ROUTER_JUDGE_LLM_KEY || null;
|
||
}
|
||
|
||
const MODE_ENV = 'ROUTER_MENTOR_JUDGE_MODE'; // 'shadow' (default) | 'block'
|
||
|
||
/**
|
||
* Режим судьи: inert ($0, нет флага/ключа) / shadow (active, логирует, НЕ блокирует — D28
|
||
* «сперва тихо») / live-block (active + MODE=block, блокирует на NO-GO). Рубильник (judgeActive)
|
||
* важнее режима: MODE=block без флага/ключа → всё равно inert. Default при активации — shadow
|
||
* (рекомендуемая обкатка §11; владелец переводит в block отдельным шагом).
|
||
*/
|
||
export function judgeGateMode({ env = process.env, keychainGet } = {}) {
|
||
if (!judgeActive({ env, keychainGet })) return 'inert';
|
||
return env[MODE_ENV] === 'block' ? 'live-block' : 'shadow';
|
||
}
|
||
|
||
export const _internals = { ENABLED_ENV, MODE_ENV };
|