Skip to content

Releases

v0.1.12 — Plugin-list localization and host settings cleanup

Choose a tag to compare

@GooDAnDReaDY GooDAnDReaDY released this 25 Sep 18:29

English

Fixed

  • Plugin-list label localization: plugins.item slot now registers a dynamic thunk label: () => getLocalizedTitle() that resolves to '模型搜索' when Chinese (zh) is active, instead of bypassing the plugin locale dictionary with a hardcoded English literal.
  • Obsolete settings.register compatibility probe: removed legacy ctx.inject(['settings'], ...) probe calling removed DSH 0.1.7 settings API for an empty Config schema, eliminating runtime debug warnings on host initialization.

简体中文

修复

  • 插件列表名称本地化: plugins.item 插槽注册使用动态 thunk label: () => getLocalizedTitle(),在激活中文 (zh) 时正确解析为 '模型搜索',消除硬编码英文。
  • 移除过时的 settings.register 探测: 移除对已废弃 DSH 0.1.7 settings API 的兼容性探测调用,消除空 Config 引起的调试警告。

Русский

Исправлено

  • Локализация названия в списке плагинов: слот plugins.item теперь регистрирует динамическую функцию label: () => getLocalizedTitle(), корректно возвращающую '模型搜索' при активной китайской локали (zh).
  • Удаление устаревшего вызова settings.register: удалён legacy-блок опроса удалённого API настроек DSH 0.1.7 для пустой схемы Config, устранены отладочные предупреждения на хосте.

v0.1.11 — Performance optimization, memory leak fix and settings status

Choose a tag to compare

@GooDAnDReaDY GooDAnDReaDY released this 24 Sep 10:25

English

Fixed

  • Memory leak in activeMenus on dropdown unmount: pruned disconnected DOM elements to ensure complete teardown (state.cleanup(), search wrap removal, event listener detachment) when the model selector dropdown unmounts.
  • Settings fallback version: dynamically injected package.json version into lib/client.js during build, eliminating stale 0.1.6 fallback.
  • DOM mutation tracking: updated isMenuNode to inspect ancestor hierarchy via node.closest, properly detecting child group insertions inside already mounted menu containers.

Performance

  • Single query tokenization per keystroke: separated query parsing into tokenizeQuery and pre-tokenized queries in updateFilter(), replacing hundreds of regex splits per keystroke with one. Acronym calculation (extractInitials) is now lazy, reducing matching time across 350+ models to under 3ms.

简体中文

修复

  • 下拉菜单卸载时 activeMenus 内存泄漏: 在 scan() 中清理未连接的 DOM 节点,确保在 React 卸载模型选择菜单时完整执行资源释放。
  • 设置卡片版本号回退: 构建时自动从 package.json 注入实际版本号,消除陈旧的 0.1.6 硬编码。
  • DOM 变动监听优化: isMenuNode 增加 node.closest 祖先层级判定,保证动态插入的模型分组能够及时触发搜索框挂载。

性能优化

  • 单次输入只分词一次: 将查询分词抽离为 tokenizeQuery,在 updateFilter() 中仅执行一次分词。同时将首字母缩写计算(extractInitials)转为惰性求值,350+ 模型检索耗时降低至 3ms 以内。

Русский

Исправлено

  • Утечка памяти в activeMenus при размонтировании меню: scan() теперь очищает отсоединенные узлы (isConnected === false), выполняя полный демонтаж и снятие обработчиков.
  • Устранение хардкода 0.1.6 в карточке настроек: сборщик автоматически подставляет версию из package.json.
  • Отслеживание мутаций дочерних элементов меню: isMenuNode расширен восходящей проверкой node.closest, гарантируя монтирование поиска при динамической подгрузке каталога.

Оптимизация

  • Однократная токенизация запроса: токенизация выполняется 1 раз за нажатие клавиши, а расчет акронимов переведен на ленивую схему. Сопоставление по 350+ моделям занимает менее 3 мс.

v0.1.10

Choose a tag to compare

@GooDAnDReaDY GooDAnDReaDY released this 19 Sep 22:23

Full Changelog: v0.1.8...v0.1.10

v0.1.9

Choose a tag to compare

@GooDAnDReaDY GooDAnDReaDY released this 19 Sep 22:37

Full Changelog: v0.1.8...v0.1.9

v0.1.8 — Resilient Web Boot, One-Click Updater, & Preflight Compliance

Choose a tag to compare

@GooDAnDReaDY GooDAnDReaDY released this 18 Sep 16:36

🇬🇧 English

Overview

Release v0.1.8 brings critical stability improvements, production lifecycle resilience, a built-in one-click plugin updater, and preflight code compliance.

What's Changed

  • Resilient Web Boot Lifecycle: Implemented deferred, safe slot injection (registerSlotWhenReady) using ctx.slots.inject('settings.plugin.item', ...) with defensive exception handling and lifecycle bindings. Prevents WebUI boot crashes caused by uninitialized parent settings slots.
  • One-Click In-App Updater: Added host-side update module (lib/updater.js) with loopback security, semver comparison, and settings card integration.
  • Preflight & Code Quality Compliance: Eliminated all empty catch blocks, replacing them with structured diagnostic logging.
  • Theme & DOM Compliance: Converted all literal hex and rgba styling to native DSH --dsw-* semantic tokens and added stable data-dsh-plugin="dsh-model-search" markers on injected style elements.
  • Public Packaging: Excluded internal planning documents from the release package, keeping package size at an ultra-lightweight 21.8 kB.

🇨🇳 中文说明

概述

v0.1.8 版本带来了关键的稳定性改进、生产生命周期弹性、内置一键插件更新器以及预检代码规范支持。

主要更新

  • 弹性 Web 启动生命周期:采用安全的延迟槽位注入机制(registerSlotWhenReady)与 ctx.slots.inject('settings.plugin.item', ...),增加了防御性异常捕获和生命周期保护,彻底解决因父级设置插槽尚未声明而导致的 Web 启动失败问题。
  • 一键更新模块:引入服务端更新模块(lib/updater.js),支持同源/本地环回安全校验、语义化版本比对及设置界面卡片集成。
  • 代码质量规范:移除了所有空 catch 代码块,替换为结构化诊断日志,满足严格的 preflight 检查要求。
  • 主题与 DOM 规范:将样式中的硬编码颜色值全面替换为 DSH --dsw-* 语义化主题变量,并为动态注入的 style 标签增加 data-dsh-plugin="dsh-model-search" 标识。
  • 精简发布包:从发布包中严格排除内部开发文档,打包后体积仅 21.8 kB。

🇷🇺 Русский

Обзор

Релиз v0.1.8 включает критические улучшения отказоустойчивости жизненного цикла плагина в WebUI, встроенный модуль обновления в один клик, поддержку семантических токенов оформления и соответствие стандарту preflight.

Что сделано

  • Безопасная отложенная инициализация слотов: Реализовано безопасное внедрение слота настроек (registerSlotWhenReady) через ctx.slots.inject('settings.plugin.item', ...) с защитными обработчиками ошибок и жизненным циклом. Устранена блокирующая ошибка запуска WebUI при обращении к ещё не объявленному родительскому слоту.
  • Модуль обновления в один клик: Интегрирован серверный модуль (lib/updater.js) с проверкой loopback/same-origin, сравнением semver и карточкой в настройках плагина.
  • Соответствие Preflight: Устранены все пустые блоки catch с добавлением информативного диагностического логирования.
  • Семантические токены темы и DOM: Цвета интерфейса переведены на системные переменные --dsw-*, динамический тег style помечен атрибутом data-dsh-plugin="dsh-model-search".
  • Чистый состав пакета: Исключены служебные файлы планов, размер архива в npm составляет всего 21.8 КБ.

Verification: All 16 unit tests passing. Preflight: FAIL=0.

v0.1.7

Choose a tag to compare

@GooDAnDReaDY GooDAnDReaDY released this 18 Sep 16:30

Release v0.1.7

Key Features & Improvements

  • Built-in One-Click Updater: Host-side updater endpoint (/api/dsh-model-search/update) and settings card in DSH Settings tab.
  • Resilient WebUI Boot: Resolved runtime boot entry failure (web boot: 1 entry did not activate) using deferred slot injection (settings.plugin.item), safe DOM guards, and lifecycle management.
  • Theme & Styling: Complete migration to semantic --dsw-* theme variables and stable data-dsh-plugin="dsh-model-search" attribute for style isolation.
  • Package Cleanliness: Excluded internal development plans from release package; verified file sizes well below DSH Store limits.
  • Code Quality: Zero empty catch blocks per preflight standard; 16/16 automated tests passing.
  • Multi-language Documentation: Full English, Chinese, and Russian documentation and locale dictionaries.

v0.1.6: Architecture Hardening & Defect Remediation

Choose a tag to compare

@GooDAnDReaDY GooDAnDReaDY released this 15 Sep 11:46

Highlights in v0.1.6

  • Canonical Locale Pipeline: Fixed locale resolution by binding via \ctx.locale.bind()\ and properly registering dictionaries inside \ctx.effect()\ with lifecycle-managed teardown. Supports real-time EN, ZH, and dynamic Russian translation.
  • Unified Identity: Synchronized package name to @goodandready/dsh-model-search\ across all manifests and sources.
  • Zero-Overhead Search: Selective MutationObserver filter guarantees true zero CPU overhead during chat token streaming.
  • Extracted Matcher Engine: \lib/matcher.js\ extracted with build parity check (
    pm run build) and direct unit test imports.
  • DOM & State Hardening: State managed via WeakMap/Set; section headings queried safely via \�ria-labelledby\ and \CSS.escape().
  • Streamlined Scope: Removed dead write-only recents code in favor of pure, instant live fuzzy model searching.

v0.1.5 — Live searchable model selector enhancement

Choose a tag to compare

@GooDAnDReaDY GooDAnDReaDY released this 14 Sep 20:34

Features in v0.1.5

  • Instant Search & Multi-term Matching: Real-time filtering by model name, technical ID, and provider title with delimiter support (/, ,, ;, spaces).
  • Subsequence & Acronym Fuzzy Matching: Smart matching for acronyms and non-contiguous search queries (e.g. dsr1 -> deepseek-reasoner-1).
  • Provider Syntax Filter: @provider syntax (e.g. @ollama, @openai) to isolate models by provider.
  • Recent Models Memory: Tracks recently selected models in browser localStorage for quick access.
  • Multi-Language Architecture: Native English (en) and Chinese (zh) support in core; Russian translation provided via @goodandready/dsh-russian-lang.
  • Keyboard Navigation & A11y: Full arrow-key cycling across visible matches and Enter activation.
  • Core Resilience: Non-mutating DOM visibility control immune to DSH core CSS module class changes.

Installation

dsh plugin --profile web add @goodandready/dsh-model-search@0.1.5

v0.1.1 — совместимость клиентской половины с ядром DSH 0.1.2-rc.1

Choose a tag to compare

@GooDAnDReaDY GooDAnDReaDY released this 05 Sep 13:31

Зачем

Ядро DSH 0.1.2-rc.1 убрало из браузерной поставки @deepseek-ai/dsh-client-runtime, @deepseek-ai/dsh-client-ui-slots и @deepseek-ai/dsh-client-ui-primitives; загрузчик не выдаёт модуль вне своей таблицы (46 записей), и клиентская половина падала в «Failed to load plugins».

Что изменено

inject: убран ui-slots.
ctx.slots в rc.1 — встроенная служба ядра. Защищённый require primitives сохранён (ядро отдаёт модуль через staticModules-шиму, при отсутствии — собственный SVG-фолбэк).

Проверки

  • node --test — 0 fail
  • изолированный test server (rc.1): установка из .tgz, inject ⊆ 46-таблица, загрузка без «Failed to load plugins»
  • production: установлена именно 0.1.1, boot-таблица без мёртвых модулей, inject валиден, журнал чист

Совместимость

Серверная половина не затронута; визуал и поведение не меняются. Установка: dsh plugin --profile web add @goodandready/@0.1.1 (или актуальная).