Skip to content

dsh-recent-fav-models

Verified

dsh-recent-fav-models · v0.1.0 · MIT · Web UI

DeepSeek Harness plugin «Свежие модели» — embeds a «Последние» (5 most recently used, unique) and a collapsible «Избранные» block at the top of the model selector popup. Clicking a model programmatically activates the matching stock `[role="menuitemradio"

Install

dsh plugin add dsh-recent-fav-models

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Published to npm without a public repository. Inspect the package contents before installing.

Tags

Readme

dsh-recent-fav-models

Плагин DeepSeek Harness «Свежие модели» — расширяет выпадающий список выбора модели списками, группировкой и навигацией. Неинвазивный: не форкает и не «затеняет» штатный UI — ждёт появления [role="menu"] в DOM и работает поверх него чистым DOM API (без React, слотов и словарей).

Возможности

Блоки вверху списка моделей

  • «Последние» — до 5 уникальных, самых недавно использованных моделей (самая свежая первой, MRU). Обновляется автоматически при каждом выборе модели (в т.ч. из обычного списка). У каждой строки справа — звёздочка ★/☆: клик добавляет/убирает модель из избранного.
  • «Избранные» — сворачиваемый блок (шеврон ▾/▸). В заголовке кнопка «+» открывает попап со ВСЕМИ моделями и чекбоксами, чтобы добавить сразу несколько.
  • Пользовательские списки — именованные сворачиваемые списки моделей. Создание/редактирование/переименование/удаление — через попап (кнопка «+» у «Избранные» либо «+» в заголовке списка). Имя валидируется хостовой стороной: латиница+кириллица+пробелы, 3–40 символов. Каждый список имеет «🗑» (удаление с подтверждением).

Группировка и навигация по списку моделей

  • Сворачиваемые группы провайдеров — штатные секции провайдеров (Anthropic, OpenAI, Google, …) сворачиваются/разворачиваются кликом по заголовку группы (шеврон ▾/▸). Состояние (какие группы свёрнуты) сохраняется на хосте и восстанавливается. По умолчанию все группы развёрнуты.
  • Скролл к выбранной модели — при каждом первом открытии списка он прокручивается к текущей выбранной модели (даже если это модель по умолчанию). Если выбранная модель лежит внутри свёрнутой группы — группа автоматически разворачивается.
  • Плавающая кнопка «▴» — закреплена внизу окна со списком моделей независимо от прокрутки. Поведение:
    • если выбранная модель выше видимой области и не в поле зрения → прокрутка к её строке;
    • если выбранная модель ниже или в поле зрения → прокрутка на самый верх. Кнопка скрывается, когда список закрыт.

Архитектура и хранение

  • Хранение на хосте — один JSON-файл (<DSH_HOME>/recent-fav-models.json, по умолчанию ~/.dsh/recent-fav-models.json), атомарная запись (temp + rename), переживает перезапуск DSH. Следует DSH_HOME (в изолированном профиле/превью — свои записи). schemaVersion: 2.
  • Ключ модели — точная строка title штатной кнопки [role="menuitemradio"] (уникальна на строку); ею же клиент ищет совпадение в живом DOM — единственная стабильная идентичность end-to-end.
  • Канал — прямой webServer-роут POST /recent-fav/<method> (не ctx.connection.rpc, т.к. dsh-client-connection не резолвит webServer в этом Cordis-дереве), паттерн как у dsh-skill-folder / @weibaohui/skills-management.
  • Выбор модели — программный клик по штатному [role="menuitemradio"][title=<ключ>], запускается штатный обработчик DSH; модуль никогда сам не переключает модель.

Методы RPC (по адресу /recent-fav/<method>, POST, JSON)

Метод Вход Выход
snapshot {} { recent, favorites, lists, collapsedGroups, schemaVersion, maxRecent }
markUsed { key } { ok, recent }
setFavorites { keys } { ok, favorites }
createList { name, models } { ok, list, lists }
renameList { id, name } { ok, lists }
deleteList { id } { ok, lists }
setListModels { id, models, name? } { ok, lists }
setGroupCollapsed { names } { ok, collapsedGroups }

Ошибки возвращаются со статусом 200 и полем result.error: bad-request (невалидные входы), not-found (неизвестный список/метод).

Возможности/структура

  • lib/index.js — хостовый плагин: регистрация RPC-роута /recent-fav, валидация входов.
  • lib/storage.js — атомарное JSON-хранилище (recent, favorites, lists, collapsedGroups).
  • lib/client.js — веб-бандл: инъекция блоков, попапы, группы, скролл, плавающая кнопка.

Установка (из npm)

Пакет публикуется в npm как dsh-recent-fav-models. Установка идёт в профиль DSH (под капотом это pnpm add, тянущий пакет из npmjs):

dsh plugin --profile web add dsh-recent-fav-models
dsh web

<name> в --profile <name> — имя вашего профиля DSH (обычно web, если не настраивали отдельный профиль). После установки/обновления клиентской части обязателен хард-рефреш (Ctrl+Shift+R), т.к. клиентский бандл кэшируется.

Локальная разработка

Вместо npm-пакета можно подключить модуль из локального каталога через link: (в package.json профиля): "dsh-recent-fav-models": "link:/путь/до/dsh-recent-fav-models".

Скрипты

  • npm run check — синтаксическая проверка всех lib/*.js через node --check.

Требования

  • Node.js 22+
  • DSH 0.1.x (протестировано на 0.1.5-rc.3)