OpenCode - подключение opencode-smart-title - автоматические имена сессий - 2026

Материал из Wiki - Iphoster - the best ever hosting and support. 2005 - 2026
Перейти к:навигация, поиск

Published: 2026-09-29


OpenCode сам придумывает сессиям названия вида «New session», и в списке проекта десятки безымянных диалогов. Плагин opencode-smart-title решает задачу: он смотрит на переписку и переименовывает сессию в короткий осмысленный заголовок, когда вы остановились печатать.

Просто добавить плагин в opencode.json в 2026 году недостаточно. Оригинал от Tarquinen падает на OpenCode 1.18.33 с ошибкой Unsupported model version v4, а свежие модели от Google дополнительно ломаются на схемах MCP-инструментов. Ниже — рабочая схема подключения на форке с локальным патчем промпта и проверка на живом сервере.

Обзор

Плагин не обращается к LLM напрямую. Он создаёт дочернюю (subagent) сессию через API самого OpenCode, отправляет в неё промпт с контекстом разговора, забирает ответ и записывает его в заголовок родительской сессии. Отсюда главное следствие: качество и доступность генератора зависят от моделей, которые видит OpenCode, а не от отдельного API-ключа.

Ключевые параметры
Параметр Значение
Оригинал @tarquinen/opencode-smart-title 0.1.7
Рабочий вариант @hyakt/opencode-smart-title 0.1.10
Проверено на OpenCode 1.18.33
Модель генератора opencode/big-pickle
Файл конфига ~/.config/opencode/smart-title.jsonc
Лог отладки ~/.config/opencode/logs/smart-title/YYYY-MM-DD.log

Почему оригинал не работает

Оригинальный плагин внутри себя использует пакет @tarquinen/opencode-auth-provider и AI SDK версии 5. Эта связка умеет только с моделями спецификации v2, а OpenCode 1.18.33 отдаёт модели спецификации v4. Ошибка возникает мгновенно, до первого токена, и одинакова для всех провайдеров:

Подмена модели не помогает: ошибка приходит на уровне протокола, а не на уровне доступа к ключу. Нужен форк, который вообще не импортирует AI SDK.

Форк hyakt убирает три тяжёлые зависимости (<code>ai</code>, <code>@ai-sdk/openai-compatible</code>, <code>@tarquinen/opencode-auth-provider</code>) и заменяет прямой вызов на <code>client.session.create()</code> плюс <code>client.session.prompt()</code>. В конфиг добавляется одна строка:

<syntaxhighlight lang="json"
{
  "plugin": ["@hyakt/opencode-smart-title"]
}

Какую модель выбрать

В дочерней сессии наследуются все инструменты основной сессии, включая MCP-серверы. Модели Google при попытке построить схемы этих инструментов валятся на одном из параметров типа enum:

Это баг схемы одного из ваших MCP-инструментов, а не проблема заголовков. Модели семейства <code>google/gemini-*</code> в этой конфигурации непригодны, а модель <code>opencode/big-pickle</code> работает: она корректно принимает полный набор инструментов и отвечает быстро.

Конфигурация генератора (файл <code>smart-title.jsonc</code>, <code>model</code> указывается как <code>провайдер/модель</code>):

<syntaxhighlight lang="jsonc"
{
  "enabled": true,
  "debug": false,
  "model": "opencode/big-pickle",
  "updateThreshold": 1
}

Поле updateThreshold — это сколько событий простоя должно пройти перед переименованием. Значение 1 переименовывает сессию на каждой паузе, 3 заставит ждать более длинного диалога.

Встроенный title-агент

В OpenCode есть собственный агент title, который тоже проставляет заголовки. Одновременно с плагином они мешают друг другу: встроенный агент может выбрать модель с нулевым балансом и постоянно сыпать ошибки в лог. Отключается он в opencode.json:

Типичная ошибка, если этого не сделать, выглядит так: <code>Insufficient account funds</code> на модели <code>gpt-5.4-nano</code>. Заголовок при этом всё равно поставит плагин, но в логе будет постоянный шум.

== Заголовки на русском и английском ==

Промпт плагина в оригинале жёстко заточен под английский: в правилах стоит требование использовать глаголы с окончанием <code>-ing</code>, поэтому все заголовки выходят на английском независимо от языка разговора.

Два способа это исправить.

Первый — задать свой промпт в конфиге, поле <code>prompt</code> поддерживается плагином и полностью заменяет встроенный:

<syntaxhighlight lang="jsonc
{
  "model": "opencode/big-pickle",
  "prompt": "Ты генератор заголовков. Определи язык сообщений пользователя и ответь ОДНИМ заголовком на этом же языке, до 50 символов. Технические термины не переводи."
}

Второй — пропатчить промпт на диске. Он лежит в пакете рядом с основным файлом плагина, и правится без пересборки:

Практика показала, что правила в промпте недостаточно: модель продолжала отвечать по-русски на английский запрос. Надёжнее определить язык локально и передать его явной меткой. В <code>dist/index.js</code> рядом с отправкой промпта добавляется проверка наличия кириллицы:

<syntaxhighlight lang="js
const detectedLanguage = /[\u0400-\u04FF]/.test(context) ? 'ru' : 'en'

Далее в тело запроса добавляется тег <detected_language> со значением ru или en, а в промпте — правило «заголовок пишется строго на этом языке, технические термины не переводятся». После такой правки русский запрос даёт русский заголовок, английский — английский.

Установка локальной копии

Если плагин нужно патчить, удобно не зависеть от npm: файлы кладутся рядом с конфигом, а в списке плагинов указывается путь через file://. Такой способ описан в документации OpenCode по плагинам.

В <code>~/.config/opencode/opencode.json</code> плагин подключается по пути к файлу:

<syntaxhighlight lang="json"
{
  "plugin": [
    "file:///Users/antonmac/.config/opencode/plugins/smart-title/dist/index.js"
  ]
}

Единственная внешняя зависимость пакета — jsonc-parser для чтения файла конфигурации. Её нужно добавить в package.json самой папки конфига OpenCode и выполнить установку:

== Проверка и отладка ==

Включите <code>"debug": true</code> и посмотрите лог <code>~/.config/opencode/logs/smart-title/</code>. Полезная последовательность записей выглядит так:

<syntaxhighlight lang="text
Smart Title plugin initialized  model=opencode/big-pickle
Session became idle
Turn context  user=Объясни разницу между TCP и UDP
Child session created  model=opencode/big-pickle
Detected conversation language  detectedLanguage=ru
Title generated successfully  title=Разница между TCP и UDP
Session title updated successfully

Обратите внимание на две строки. Запись No response from subagent означает, что дочерняя сессия не вернула ответ — обычно виновата модель, а не плагин. Запись Title generation returned null после неё означает, что заголовок не обновился.

Проверять удобно через opencode serve на отдельном порту: плагин работает и там, а сессии можно создавать и опрашивать по HTTP API, не трогая основной интерфейс.

Что показал тест
Запрос Заголовок
Объясни разницу между TCP и UDP Разница между TCP и UDP
Сравни цены на VPS в Европе и США Сравнение цен на VPS в Европе и США
Explain the difference between TCP and UDP TCP vs UDP differences
Add PostgreSQL indexes to the slow queries table Adding PostgreSQL indexes to slow queries table

Сравнение вариантов

Способы переименования сессий
Вариант Плюсы Минусы
@tarquinen/opencode-smart-title Каноничный, автор активно поддерживает репозиторий Несовместим с OpenCode 1.18.33: прямой вызов через AI SDK 5
@hyakt/opencode-smart-title Работает с 1.18.33, любой провайдер OpenCode, есть свой промпт Промпт только на английском, без патчей или замены модели
Локальная копия форка Свой промпт, свой язык заголовков, независимость от npm Патчи нужно переносить при обновлении пакета
Встроенный агент title Не требует настройки Ошибки при нулевом балансе провайдера, неконтролируемый выбор модели

FAQ

Подскажите, заголовки не появляются вообще. С чего начать? Включите "debug": true в smart-title.jsonc и откройте свежий лог в ~/.config/opencode/logs/smart-title/. Если строки Session became idle нет — плагин не загружен, проверьте путь в plugin и перезапустите OpenCode.

Ошибка Unsupported model version v4 Вы подключили оригинальный Tarquinen или его npm-версию. Он использует AI SDK 5 и не понимает спецификацию v4. Переходите на форк hyakt.

Ошибка Invalid value at tools[0].function_declarations Модель Google не может построить схемы ваших MCP-инструментов в дочерней сессии. Поменяйте model в конфиге на opencode/big-pickle или другую модель, которая корректно принимает инструменты.

Можно ли задать свой промпт? Да, поле prompt в smart-title.jsonc. Оно полностью заменяет встроенный промпт, поэтому все правила и примеры нужно указать в нём самому.

Заголовок обновляется слишком часто Увеличьте updateThreshold с 1 до 3 или 5. Плагин будет переименовывать сессию реже и с более длинным контекстом.

Итог

Плагин подключается за пару минут, если взять совместимый форк, указать модель, которая тянет MCP-инструменты, и отключить встроенный агент title. Русские и английские заголовки требуют патча промпта: определение языка по наличию кириллицы в коде надёжнее, чем просьба к модели. Данные актуальны на 29.09.2026.

Источники

×
Реклама
← В главную
ИКС 88x31 - Visitor counter