v1.22.0
Накопительный релиз снижения перерасхода токенов на старте rlm_start: три улучшения «бюджет/глубина/подсказки» (Part 1–3, ранее закоммичены без бампа версии) + усечение списка расширений на конфигурациях с экстремальным их числом (Part 4). Весь функционал — read-only слой поверх стратегии/песочницы: схема индекса и BUILDER_VERSION (14) НЕ менялись, пересборка боевых индексов НЕ требуется.
Добавлено
- Авто-выбор глубины анализа — новый дефолт
effort="auto". Сервер берётmediumдля простых запросов иhighдля многоаспектных (по маркерам сложности — жизненный цикл / механизм / сквозной анализ), вместо фиксированной глубины. Прецеденс:RLM_FORCE_EFFORT(env, жёсткий замок для админа) > явныйeffortагента >auto. Server-default числовых лимитов вызовов на тире задаютRLM_MAX_EXECUTE_CALLS/RLM_MAX_LLM_CALLS(явныеmax_execute_calls/max_llm_callsтула их перекрывают — это НЕ hard cap). Итоговые значения видны в ответе (effective_effort+limits); если итоговые лимиты расходятся с пресетом effort, в начало стратегии дописывается правдивый баннер== SERVER LIMIT OVERRIDE ==. - Точные подсказки песочницы при ошибках вызова.
NameErrorпо угаданному имени хелпера → подсказка с реальным именем (известный алиас или fuzzy-поиск); неподдерживаемый именованный аргумент → реальная сигнатура хелпера (включая generic-IOgrep/read_file/…). Меньше тупиковых вызовов на слабых моделях.
Изменено
- Глобальный бюджет дампа перехватов расширений в стратегии (
RLM_EXT_OVERRIDE_DETAIL, дефолт0). Общий блок_extension_strategyна конфигурациях с большим числом расширений вываливал до 30 строк поимённых перехватов на каждое расширение без общего лимита — десятки тысяч символов в каждомrlm_start, в т.ч. в legacy-режимеfull(УТ 11.5: 14 расширений / 1258 перехватов → ~64К символов / ~37К токенов, переплачивалось в каждой сессии). Теперь по умолчанию только счётчики на расширение + один указательget_overrides('ИмяОбъекта'); поимённая детализация — opt-in черезRLM_EXT_OVERRIDE_DETAIL(единый глобальный бюджет строк, не на расширение). Заодно устранён ложный маркер «… and more» в_format_overrides_summaryна точной границе бюджета. - Усечение агент-facing списка расширений на старте до top-N по overrides (
RLM_EXT_LIST_CAP, дефолт20). На конфигурациях с экстремальным числом расширений (155 расширений / 604 перехвата) один и тот же список сериализовался трижды —warnings, полеextension_context.nearby_extensionsи заголовок стратегии «CRITICAL — EXTENSIONS DETECTED» — раздувая ответrlm_startдо ~68.6К символов / ~39К токенов, что превышало токен-лимит инструмента: payload не влезал inline, агент в реальном клиенте получал ошибку вместо стратегии. Теперь при числе расширений > cap эти три представления (только ветка MAIN) ужимаются до top-N по числу overrides с полным детерминированным тай-брейком(-overrides, name, name_prefix, normcase(path)):warnings→ короткая контекст-нейтральная сводка с числом расширений + указательdetect_extensions()(вместо конкатенации всех путей);nearby_extensions→ top-N + машинно-очевидные companion-поляnearby_extensions_truncated/nearby_extensions_total/nearby_extensions_shown/extensions_hint; заголовок стратегии → top-N имён + строка «… +K more (detect_extensions())» + сводная строка по скрытым («… +K more extensions, N overrides total»). При числе расширений ≤ cap (подавляющее большинство конфигов) поведение байт-в-байт прежнее. Значение<=0(в т.ч.-1) — без лимита; невалидный env → дефолт20. На реальной конфигурации с 155 расширениями старт упал с ~39К до ~13К токенов (влезает inline). Полнота данных не теряется: полный список —detect_extensions()/get_overrides(); внутренний список объектов расширений и питание песочницы (extension_paths, все 155 путей) НЕ усекаются —find_module/find_attributes/parse_object_xml/read_procedureпо «хвостовым» расширениям вне top-N работают как раньше. Усечение применяется только к ветке MAIN; сессии, открытые на одиночном расширении (EXTENSION-роль), не затрагиваются. Поиск и анализ не изменены.
Совместимость
- Схема индекса и
BUILDER_VERSION(14) НЕ менялись — пересборка не требуется. Все правки — read-only слой над стратегией/песочницей/ответомrlm_start, отдельный от индекса. Новых таблиц/колонок/индексов нет. - Soft-breaking (осознанный tradeoff): на конфигурациях с числом расширений >
RLM_EXT_LIST_CAPполеextension_context.nearby_extensionsотдаёт ТОЛЬКО top-N, а не весь список. Старый клиент, итерирующий это поле как полный список, на extreme-конфиге увидит усечённый. Митигировано явным булевымnearby_extensions_truncated: true+nearby_extensions_total/nearby_extensions_shown/extensions_hint(самодокументируемо и машинно-детектируемо) и полным списком черезdetect_extensions(). Для конфигов с числом расширений ≤ cap поведение прежнее. Альтернатива (token-overflow — инструмент вообще не отвечает inline) — хуже. - Дефолт глубины анализа сменён с фиксированного на
auto(medium/high по маркерам сложности). Прежнее поведение «всегда high» воспроизводится явнымeffort="high"илиRLM_FORCE_EFFORT=high. - Новые env-переменные:
RLM_EXT_LIST_CAP,RLM_EXT_OVERRIDE_DETAIL,RLM_FORCE_EFFORT,RLM_MAX_EXECUTE_CALLS,RLM_MAX_LLM_CALLS— см.docs/ENV_REFERENCE.mdи.env.example. Все опциональны, дефолты сохраняют разумное поведение.
Полный список изменений: CHANGELOG.md