PLAN_NEXT_ITERATION.md

План следующего цикла разработки

Дата: 2026-03-10

Что сделано

  • Структура проекта исправлена

    • Исходники в src/
    • Скомпилированные файлы в dist/
    • .lmstudio/entry.ts импортирует из dist/
  • Выпадающий список моделей работает

    • Загрузка кэша из models-cache.json при старте
    • 24 free модели в списке + опция "— Auto —"
    • Фоновое обновление кэша каждый час
  • Два поля конфигурации

    • Model — выпадающий список для выбора
    • Custom Model ID — поле ручного ввода
  • Логика выбора модели

    • Приоритет: customModel > model из списка > auto
    • Если customModel заполнен — используется он
    • Иначе если выбрано что-то кроме "auto" — модель из списка
    • Иначе — первая доступная free модель
  • Исправлена ошибка валидации LM Studio

    • generate() использует схему с типом "string" для чтения конфига
    • Избегаем валидации против пустого списка options

Задачи на следующий раз

1. Синхронизация полей (опционально)

Проблема: При выборе модели из выпадающего списка значение НЕ копируется в поле Custom Model ID.

Варианты решения:

  • Оставить как есть (пользователь может использовать либо список, либо ручное поле)
  • Добавить кнопку "Copy to Custom Field" рядом с dropdown
  • Исследовать LM Studio SDK на предмет onUpdate хуков

Статус: Не критично, работает и так


2. Обработка пустого кэша

Проблема: Если models-cache.json не существует или устарел, список моделей пуст при первом запуске.

Варианты решения:

  • Показывать индикатор "Загрузка моделей..." в UI
  • Блокировать выбор модели пока кэш не загрузится
  • Добавить кнопку "Refresh Models" в интерфейс

Статус: Требуется доработка


3. Фильтр Only Free Models

Проблема: Флаг onlyFreeModels сейчас не влияет на список в UI — показываются только free модели всегда.

Варианты решения:

  • При переключении флага пересоздавать схему с полным/фильтрованным списком
  • Или загружать все модели и фильтровать на лету

Статус: Требуется доработка


4. Обработка ошибок API

Проблема: При ошибке загрузки моделей нет явного уведомления пользователя.

Варианты решения:

  • Добавить вывод ошибки в лог чата
  • Показать fallback модель с предупреждением
  • Добавить поле "Last Error" в конфиг

Статус: Частично реализовано в логах


5. Кастомизация отображения моделей

Проблема: generateDisplayName() может некорректно форматировать некоторые названия моделей.

Варианты решения:

  • Добавить настройки формата отображения
  • Показывать полное имя модели в tooltip
  • Добавить поиск/фильтрацию в dropdown

Статус: Работает приемлемо


Известные ограничения LM Studio SDK

  • Нет динамического обновления схемы — нельзя изменить options после создания схемы
  • Нет onUpdate хуков для полей конфигурации (или документация неполная)
  • Валидация при getPluginConfig() — значение должно входить в options для типа "select"

Команды для разработки

# Сборка TypeScript
npm run build

# Запуск в режиме разработки (установка в LM Studio)
npm run dev

# Установка обновлённой версии (push)
npm run push

Установка плагина локально, без пуша на Хаб.

lms dev --install -y


Структура файлов

D:\LMS-src\o!-endpoint\
├── src/                      # Исходники TypeScript
│   ├── api.ts               # API вызовы (fetchModels)
│   ├── config.ts            # Схема конфигурации по умолчанию
│   ├── file-cache.ts        # Кэширование моделей
│   ├── generator.ts         # Генерация ответов (использует string схему)
│   ├── index.ts             # Точка входа, загрузка кэша
│   ├── models.ts            # Логика загрузки моделей
│   └── schema.ts            # Создание схемы с options (select)
├── dist/                     # Скомпилированные .js файлы
├── .lmstudio/
│   ├── entry.ts             # Точка входа для LM Studio
│   └── dev.js               # Бандл от lms dev
├── models-cache.json         # Кэш моделей (создаётся при запуске)
└── package.json

Контакты / Ресурсы

  • LM Studio SDK: @lmstudio/sdk v1.4.0
  • OpenRouter API: https://openrouter.ai/api/v1
  • Документация LM Studio: (требуется найти)