#!/usr/bin/env node /** * registry-initial-inputs — токены-данности задачи (initialInputs для машины охвата). * Источник истины — словарь capability-vocabulary.json (поле category:"given"): входы, * которые не производит ни один навык (приходят от задачи). Чистая выборка, без LLM. */ import fsDefault from 'node:fs'; /** Данности задачи = токены словаря с category:"given". Чистая, пустой/битый словарь → []. */ export function givenTokens(vocabRaw) { const toks = vocabRaw && Array.isArray(vocabRaw.tokens) ? vocabRaw.tokens : []; return toks .filter((t) => t && t.category === 'given' && typeof t.token === 'string' && t.token.trim()) .map((t) => t.token); } /** Загрузить данности с диска (fs инъектируется). Бросает на битом JSON / отсутствии файла. */ export function loadInitialInputs({ path = 'docs/registry/capability-vocabulary.json', fsImpl = fsDefault } = {}) { return givenTokens(JSON.parse(fsImpl.readFileSync(path, 'utf8'))); }