FTS — исполняемые спецификации FTS toolchain: CLI, библиотека, MCP и канонический JSON
0%

FTS toolchain: CLI, библиотека, MCP и канонический JSON

FTS toolchain: CLI, библиотека, MCP и канонический JSON

FTS требует Node.js 20 или новее. Пока репозиторий приватный, пакет можно подключить из внутреннего registry или собрать из исходников:

git clone git@github.com:the-homeless-god/fts.git
cd fts
npm ci
npm test
npm run build

После публикации пакет и CLI устанавливаются обычным способом:

npm install @digitable/fts
npx fts check model.fts

Один конвейер, три поверхности

Библиотечный API подходит Node.js-приложению:

import { compile, validate } from "@digitable/fts"

const document = compile(source)
const report = validate(document)
if (!report.valid) throw new Error(JSON.stringify(report.diagnostics))

CLI подходит CI и любому языку, который умеет запускать процесс:

fts check model.fts --pretty
fts test model.fts --pretty
fts pipeline model.fts --context snapshot.json --pretty

MCP подходит агенту. Он получает исходник строкой и вызывает read-only tools: fts_compile, fts_check, fts_test, fts_execute, fts_generate, fts_certify, fts_verify и другие.

Канонический JSON

Все поверхности приходят к одному FtsDocument. Упрощённо:

{
  "category": "Продажи",
  "structures": [
    {
      "name": "Покупка",
      "fields": [{ "name": "сумма", "type": "Деньги" }]
    }
  ],
  "functors": [],
  "proposition": null,
  "utilities": []
}

Это главный интеграционный контракт. React не обязан понимать русские ключевые слова: он получает structures. Python не обязан встраивать TypeScript-парсер: он читает JSON из stdout CLI. Агент не получает право читать произвольный файл: он передаёт исходник как аргумент MCP.

JSON-first дисциплина

Успешный CLI-ответ печатается в stdout как JSON. Диагностика ошибки печатается в stderr, процесс возвращает ненулевой exit code. Поэтому не парсите красивый текст и не определяйте успех по наличию слова ok.

if fts test policy.fts > result.json; then
  node publish-report.mjs result.json
else
  echo "FTS policy failed" >&2
  exit 1
fi

Упражнение

Скомпилируйте пример скидки, сохраните JSON и найдите в нём категорию, входную структуру, правило и ожидаемый результат. Затем измените имя поля только в правиле: fts check должен вернуть стабильный диагностический код неизвестного поля.

Дальше: русский и English

Нашли неточность? Выделите фрагмент текста — рядом появится жучок.

Нужен разбор именно вашей ситуации?

Статья описывает общий случай. Если у вас частный — можно разобрать его отдельно, платно. А если не хватает целого материала, предложите тему: её оплачивают вскладчину, и она выходит открытой для всех.

Доска запросов