y83 code / инструмент

Features

Экран Features — переключатель экспериментальных фич app-server Codex: тот же список, что и у codex features enable, но с описанием на русском, рисками и подтверждением для опасных фич.

раздел реестра
Codex
код
общий модуль чата Codex
документ
20-codex_features.md
Раздел: Codex
Идентификатор: codex_features · Экран: ui/codex/CodexFeaturesScreen.kt (381) + CodexFeatures.kt
Снимок: 2026-10-11

1. Зачем и что это

Фичи приходят из реестра самого app-server (experimentalFeature/list), у каждой есть стадия зрелости (beta, underDevelopment, stable, deprecated) и дефолтное состояние. Приложение скрывает удалённые (removed) фичи и по умолчанию показывает только «экспериментальные» стадии.

2. Как попасть

Хаб инструментов → секция Codex → карточка «Features» (hub_codex_features_title, тайл на главной — «Flags»).

Откуда ещёПуть
Меню треда CodexCodex → Features (тот же экран)
Мостapp_navigate с screen: "codex_features"

Маршрут: Screen.kt:141 ("codex_features" -> Screen.CodexFeaturesHub) → MainRouter.kt:323.

3. Экран: элементы и действия

ЭлементЧто делаетГде в коде
Список фичFeatureRow на каждую фичуvisibleExperimentalFeatures
Тумблер фичиВкл/выкл (через consent, если есть риск)onToggle(feature.name, enabled)
Диалог согласияconsent перед включением рискованной фичиCodexFeaturesScreen:216
Фильтр по стадиямЧипы beta / in development / stable / deprecatedFeatureFilter.stages
ПоискПо имени/описанию/заметке/стадииFeatureFilter.query
«Только включённые»Фильтр enabledOnlyFeatureFilter
Кнопка копированияТекст состояния всех фич в буферexperimentalFeaturesStateText
FeatureBadgeБейдж стадии/дефолтаFeatureBadge
FeatureDetailРаскрытое описание: что, эффект, риск, выведено ли из UIFeatureDetail

Заголовок списка показывает количество включённых фич (enabledExperimentalFeaturesCount).

4. Возможности подробно

Разбор реестра

parseExperimentalFeatures(json) читает experimentalFeature/list:

  • removed — скрывается полностью (включать нечего);
  • заголовок — displayName, при пустом — стабильный ключ name;
  • defaultEnabled показывает, значение фичи дефолтное или пользовательское.

Стадии в порядке «сначала самое свежее»: beta → underDevelopment → stable → deprecated. По умолчанию выбраны DefaultFeatureStages = {beta, underDevelopment} — то есть «экспериментальные» стадии; stable и deprecated видны только если выбраны фильтром.

Фильтрация и сортировка

visibleExperimentalFeatures применяет:

  1. отсев removed;
  2. фильтр по стадиям;
  3. «только включённые»;
  4. поиск по нескольким токенам (все должны совпасть) в поле: имя, заголовок, описание, стадия, ключевые слова и текст заметки featureNote(name);
  5. сортировку: включённые сверху → по рангу стадии → по имени.

Заметки о фичах (CodexFeatureNotes.kt)

Отдельный файл на 300 строк хранит FeatureNote для известных фич: what (что делает), effect (на что влияет), risk (риск), noUi (скрыта ли из UI), inferred (описание выведено/предположено), keywords (для поиска).

Для неизвестной фичи возвращается generic-заметка: «Server-side feature flag from the app-server registry. Upstream ships no description for non-beta stages», с inferred = true — то есть приложение честно помечает описание как предположенное, а не выдуманное.

Подтверждение для рискованных фич

Если у фичи в заметке заполнен risk, включение требует явного согласия: экран не переключает тумблер сразу, а показывает диалог (consent = feature). Обратное выключение подтверждения не требует.

Запись и применение

setExperimentalFeature(name, enabled) работает в два шага:

  1. Рантайм — experimentalFeature/enablement/set {enablement: {name: enabled}}. Если сервер отклонил — показывается предупреждение «Server rejected the feature toggle», и дальше не идём.
  2. Персистентность — config/batchWrite {edits: [{keyPath: "features.<name>", mergeStrategy: "upsert", value: enabled}], reloadUserConfig: true}.

Локальное состояние обновляется сразу, а плашка зависит от того, удалась ли запись: «<name> enabled» или `«<name>: runtime only (config write failed)»». Часть фич подхватится только после перезапуска app-server — об этом сказано в KDoc функции.

5. Данные: БД, файлы, настройки

ЧтоГде лежитКак меняетсяКто читает
Состояние фичРантайм app-server + ~/.codex/config.toml (features.<name>)enablement/set + config/batchWriteapp-server
Заметки о фичахКод: CodexFeatureNotes.ktПравка кода при обновлении фичЭкран

6. Backend: REST/роуты

Экран ходит не в REST-бэкенд, а в app-server Codex по JSON-RPC:

ЗапросЧто делает
experimentalFeature/list {limit, cursor?}реестр фич (с пагинацией)
experimentalFeature/enablement/set {enablement}переключить фичу в рантайме
config/batchWrite {edits, reloadUserConfig}записать features.<name> в конфиг

Список грузится с пагинацией: до 5 страниц по 200 элементов, пока не кончится nextCursor.

7. Мост и MCP

ЧтоКакПримечание
Открыть экранapp_navigate с screen: "codex_features"BridgeScreenCatalog

MCP-тулов для переключения фич нет — это прерогатива app-server и экрана.

8. Настройки, конфиг, квоты и лимиты

ПараметрЗначениеГде задаётся
Стадий в реестре4 + removedFeatureStages
Стадий по умолчаниюbeta, underDevelopmentDefaultFeatureStages
Размер страницы200loadExperimentalFeatures
Максимум страниц5То же
Заметок о фичах~300 строк кодаCodexFeatureNotes.kt

9. Ловушки и ограничения

  • Часть фич требует перезапуска app-server. Переключатель меняет рантайм и конфиг, но эффект может наступить не сразу — это указано в KDoc.
  • Если запись в конфиг не удалась, фича работает «только в рантайме». Плашка об этом сообщает явно, но после перезапуска настройка потеряется.
  • removed-фичи скрыты полностью. Если фича удалена в новой версии Codex, в списке её просто нет — найти и отключить нельзя (и не нужно).
  • stable и deprecated скрыты по умолчанию. Чтобы увидеть их, нужно расширить фильтр стадий — они не «прячутся» намеренно, а просто не в дефолтной выборке.
  • Описания части фич — предположения. Поле inferred честно помечает описание, которого нет в апстриме (non-beta стадии). Не считайте такие описания документацией.
  • Рискованная фича требует подтверждения. Если диалог пропустить, тумблер не переключится — это защита от случайного включения.
  • Все строки захардкожены по-английски в списках состояния и плашках.

10. Источники правды

  • app/src/main/java/com/y83/ws/ui/codex/CodexFeaturesScreen.kt — экран.
  • app/src/main/java/com/y83/ws/ui/codex/CodexFeatures.kt — модель, разбор, фильтрация, сортировка.
  • app/src/main/java/com/y83/ws/ui/codex/CodexFeatureNotes.kt — заметки о фичах (what/effect/risk).
  • app/src/main/java/com/y83/ws/ui/codex/CodexPlanActions.kt — загрузка списка и переключение.
  • app/src/main/java/com/y83/ws/ui/codex/CodexConfigScreens.kt, CodexChatToolScreens.kt — встраивание экрана в хаб и тред.

Источник: docs/project/hub/20-codex_features.md · Codex · общий модуль чата Codex. Страница собирается из документации проекта при сборке сайта.