@goodandready/dsh-moa 0.2.8 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,64 +1,66 @@
1
1
  # DESIGN.md — dsh-moa
2
2
 
3
3
  ## Product / Purpose
4
- - Назначение: Плагин для DeepSeek Harness, реализующий архитектуру Mixture of Agents (MoA) через команду /moa <prompt>. Позволяет параллельно генерировать варианты решения задачи несколькими моделями-кандидатами (proposers / reference models), после чего ведущая модель-агрегатор (judge / aggregator) оценивает ответы, отбирает лучшее, устраняет ошибки и синтезирует итоговый результат. После завершения команды агент автоматически возвращается к основной модели текущей сессии.
4
+ - Назначение: Плагин для DeepSeek Harness, реализующий архитектуру Mixture of Agents (MoA) через команду `/moa <prompt>`. Позволяет параллельно генерировать варианты решения задачи несколькими моделями-кандидатами (proposers / reference models), после чего ведущая модель-агрегатор (judge / aggregator) оценивает ответы, отбирает лучшее, устраняет ошибки, продвигает созданные файлы в корень проекта и синтезирует итоговый результат. После завершения команды агент автоматически возвращается к основной модели текущей сессии.
5
5
  - Аудитория: Пользователи DeepSeek Harness, решающие сложные инженерные, исследовательские, математические и архитектурные задачи, требующие ансамбля моделей и перекрёстной валидации.
6
- - Статус: Active Development
6
+ - Статус: Active Development / Production Ready (quality-audit batch 2026-09-11: честная аналитика, English-canonical UI, безопасность сбора контекста)
7
7
 
8
8
  ## User Surfaces
9
- - Web/UI: Выпадающее меню composer при вводе /moa с подсказкой и описанием; отображение индикации MoA-хода в чате; DSH Settings Card в разделе плагинов.
10
- - DSH UI / settings / slots: слот settings.plugin.item ядра DSH, ключ dsh-moa. Сворачиваемая карточка настроек пресетов, советников, агрегатора и параметров генерации.
11
- - API: HTTP endpoints хоста: GET /dsh-moa/status, GET /dsh-moa/presets, PUT /dsh-moa/presets, POST /dsh-moa/run.
12
- - CLI / Slash Commands: Команда /moa <prompt> и /moa [preset] <prompt> в строке ввода DSH.
13
- - Документация: docs/design/DESIGN.md, README.md, README.ru.md.
9
+ - Web/UI: Выпадающее меню composer при вводе `/moa` с подсказкой и описанием; отображение стриминга MoA-хода в чате в реальном времени с индикаторами кандидатов; карточка настроек плагина в DSH Settings Card (слот `settings.plugin.item`, ключ `dsh-moa`).
10
+ - DSH UI / settings / slots: слот `settings.plugin.item` ядра DSH. Сворачиваемая карточка настроек пресетов, советников, агрегатора, опросника и параметров генерации, оформленная в едином стиле с `dsh-clinebot`.
11
+ - API: HTTP endpoints хоста: `GET /dsh-moa/status`, `GET /dsh-moa/presets`, `POST /dsh-moa/presets` (payload валидируется схемой; принимает `enabled`), `GET /dsh-moa/models`, `GET /dsh-moa/history`, `GET /dsh-moa/leaderboard`, `GET /dsh-moa/runs/<id>`, `POST /dsh-moa/run` (400 при `enabled: false`).
12
+ - CLI / Slash Commands: Команда `/moa <prompt>` и `/moa [preset] <prompt>` в строке ввода DSH.
13
+ - Документация: `docs/design/DESIGN.md`, `README.md`, `README.ru.md`.
14
14
 
15
- ## Visual Direction
15
+ ## Visual Direction & ClineBot Alignment
16
16
  - Атмосфера: Строгий нативный UI ядра DeepSeek Harness, гармонично встроенный в существующий интерфейс без визуального шума.
17
- - Утверждённые референсы и что из них берём: Карточки настроек ядра («Консоль», «Цикл агента», «Поиск в вебе»); слэш-меню ядра DSH.
17
+ - Утверждённый эталонный стиль: `dsh-clinebot` — чистые карточки секций `.moa-section-card`, информативная шапка `.moa-header` со статусными бейджами реального времени (`.moa-badge-ok`, `.moa-badge-brand`), сегментированные группы переключателей `.moa-seg-group`, ползунки температуры с числовыми бейджами `.moa-slider-badge`, сетка статистики `.moa-stat-box`.
18
18
  - Не копировать: Сторонние UI-библиотеки, неродные шрифты, кастомные акцентные цвета.
19
19
 
20
20
  ## Foundations
21
- - Цвета и роли: Исключительно переменные темы DSH (--dsw-alias-border-l2, --dsw-alias-bg-layer-3, --dsw-alias-label-primary, --dsw-alias-label-secondary, --dsw-alias-label-tertiary).
22
- - Типографика: Системный стек шрифтов DSH, заголовок карточки 15px/600, пояснения 13px, поля 13px.
23
- - Сетка, отступы, responsive: Карточка 12px border-radius, шапка padding 14px 16px, поля padding 12px 0.
24
- - Accessibility: aria-expanded для раскрытия карточки, семантические кнопки, клавиатурный фокус, контрастные лейблы полей.
21
+ - Цвета и роли: Исключительно переменные темы DSH (`--dsw-alias-border-l2`, `--dsw-alias-bg-layer-2`, `--dsw-alias-bg-layer-3`, `--dsw-alias-label-primary`, `--dsw-alias-label-secondary`, `--dsw-alias-label-tertiary`, `--dsw-alias-state-brand-primary`, `--dsw-alias-state-success-primary`, `--dsw-alias-state-warning-primary`, `--dsw-alias-state-error-primary`).
22
+ - Типографика: Системный стек шрифтов DSH, заголовок карточки 20px/700, заголовки секций 15px/600, пояснения 13px, поля 13px.
23
+ - Сетка, отступы, responsive: Карточка 12px border-radius, шапка padding 14px 18px, секции padding 18px 20px, адаптивная сетка `grid-template-columns: repeat(auto-fit, minmax(200px, 1fr))`.
24
+ - Accessibility: `aria-expanded` для раскрытия карточки, семантические кнопки, клавиатурный фокус, контрастные лейблы полей, встроенный `MoAErrorBoundary`.
25
25
 
26
26
  ## Components And States
27
27
  - Компоненты:
28
- 1. MoASettingsCard — карточка настройки плагина в списке настроек плагинов.
29
- 2. PresetEditor — редактор моделей-советников и агрегатора.
30
- 3. SlashTrigger — интеграция /moa в inputTriggers.
28
+ 1. `MoACard` / `MoAEditor` — панель настройки плагина со статусной строкой, секциями пресетов, советников, судьи, телеметрией и переключателем `enabled`.
29
+ 2. `SearchableModelPicker` — быстрый выпадающий поиск моделей по провайдеру/названию с фильтрацией и поддержкой произвольных моделей.
30
+ 3. `MoAErrorBoundary` — изоляция UI-ошибок с кнопкой повторной попытки.
31
31
  - Loading / empty / error / success:
32
- - loading — состояние инициализации настроек и загрузки списка доступных моделей.
33
- - ready — активная конфигурация с валидным списком моделей.
34
- - unavailable — хост недоступен или модуль не инициализирован.
35
- - error — индикация ошибки при валидации или сохранении.
32
+ - `loading` — состояние инициализации настроек и загрузки списка доступных моделей.
33
+ - `ready` — активная конфигурация с валидным списком моделей; статусный бейдж отражает фактический ответ `GET /dsh-moa/status` (online / offline / disabled), а не рисуется безусловно.
34
+ - `unavailable` — хост недоступен с кнопкой повторного подключения.
35
+ - `error` — индикация ошибки валидации или сохранения в `moa-alert-err`; невалидный payload `POST /dsh-moa/presets` отклоняется с 400.
36
+ - Телеметрия: сетка статистики показывает Total Runs, Avg Run Cost (из `GET /dsh-moa/history`), Configured Models и Total Presets; при отсутствии данных — «—».
36
37
  - Формы, валидация и действия: Валидация наличия хотя бы одного советника и одного агрегатора.
37
38
 
38
39
  ## User Flows
39
40
  - Критические сценарии:
40
- 1. Пользователь вводит /moa <вопрос> в composer:
41
- - При вводе / отображается пункт moa в списке слэш-команд.
42
- - После отправки запускается parallel fan-out на советников.
43
- - Агрегатор синтезирует результат.
41
+ 1. Пользователь вводит `/moa <вопрос>` в composer:
42
+ - При вводе `/` отображается пункт `moa` в списке слэш-команд.
43
+ - После отправки запускается parallel fan-out на советников с живым отображением прогресса в чате.
44
+ - Агрегатор оценивает варианты, отбирает лучший код и синтезирует результат.
44
45
  - Следующее сообщение автоматически выполняется на основной модели сессии.
45
46
  2. Пользователь настраивает пресет в «Настройки -> Плагины -> Настройки плагинов -> Mixture of Agents»:
46
- - Выбор кандидатов из доступных в ctx.llm.
47
- - Выбор агрегатора.
48
- - Сохранение настроек без перезапуска сервера.
49
-
50
- ## Do / Don't
51
- - Do:
52
- - Использовать нативные переменные DSH --dsw-alias-*.
53
- - Префикс moa- для всех CSS-классов.
54
- - Обязательно восстанавливать модель сессии в блоке finally.
55
- - Стрипать служебные tool-результаты перед отправкой советникам.
56
- - Don't:
57
- - Не оставлять модель агрегатора активной после выполнения хода /moa.
58
- - Не заводить отдельный раздел верхнего уровня в сайдбаре.
59
- - Не передавать советникам системный промпт агента с инструментами.
47
+ - Выбор кандидатов из доступных в `ctx.llm`.
48
+ - Выбор агрегатора и настройка температуры.
49
+ - Включение/отключение опросника уточняющих вопросов.
50
+ - Сохранение настроек через `settingsScope` / REST без перезапуска сервера.
60
51
 
61
52
  ## Locked Design Decisions
62
- - 2026-09-03 — Реализация команды /moa как one-shot модификатора сессии с автовозвратом к базовой модели в finally.
63
- - 2026-09-03 — Использование settings.plugin.item со сворачиваемой карточкой вместо отдельной вкладки настроек.
64
- - 2026-09-03 — Поддержка именованных пресетов (default, code-review, deep-reasoning).
53
+ - 2026-09-03 — Реализация команды `/moa` как one-shot модификатора сессии с автовозвратом к базовой модели в `finally`.
54
+ - 2026-09-03 — Использование `settings.plugin.item` со сворачиваемой карточкой вместо отдельной вкладки настроек.
55
+ - 2026-09-03 — Поддержка именованных пресетов (`default`, `fast`, `deep-reasoning`).
56
+ - 2026-09-07 — Маршрутизация на реальные модели провайдеров (`targetPreset.aggregator`) без фиктивных сущностей.
57
+ - 2026-09-08 — Опциональный опросник (`ask_clarifying_questions`), zero-latency live delta queue streaming.
58
+ - 2026-09-10 — Унификация UI с дизайн-стандартом `dsh-clinebot` (статусные чипы в header, секционные карточки, дизайн-токены `--dsw-alias-*`, глубокий аудит устойчивости).
59
+ - 2026-09-11 — English-canonical пользовательские строки (сервер и клиент); ru-перевод предоставляет translation-плагин, собственный ru-дубль из пакета удалён. Причина: стандарт DSH (dsh-plugin-authoring); пересмотр — только по явному решению владельца.
60
+ - 2026-09-11 — Заглушка Live Canvas удалена (фабрикация `http://localhost:3000/preview/...`); заявления README сняты. Реальная интеграция с `dsh-live-canvas` — отдельная задача (Gitea #46). Changed: прежний пункт про автопревью больше не действует.
61
+ - 2026-09-11 — Статусный бейдж карточки отражает фактический `GET /dsh-moa/status` (online / offline / disabled); телеметрия Total Runs / Avg Run Cost берётся из `GET /dsh-moa/history`. Причина: карточка не должна показывать состояния, которые она не проверяла.
62
+ - 2026-09-11 — Переключатель `enabled` в карточке сохраняется через `settingsScope`/REST и влияет на `/moa`-turn и `POST /dsh-moa/run`.
63
+ - 2026-09-11 (вечер) — Интеграция с Live Canvas реализована через собственный REST-контракт `@goodandready/dsh-live-canvas` (`POST /dsh-live-canvas/api/preview`, self-call на порт хоста `ctx.webServer.port`) с тихой деградацией при отсутствии плагина (любая ошибка → ответ без preview-ссылки). Заменяет прежнее решение об удалении фабрикованной заглушки: ссылка `/dsh-live-canvas/sandbox/<id>` теперь создаётся реальной песочницей.
64
+
65
+
66
+ - 2026-09-12 — Реализация кураторского синтеза (`curator_synthesis`), строгой рубрики антипаттернов (`ANTIPATTERNS_RUBRIC`), живого потокового стриминга куратора (`stream_aggregator`), кворума кандидатов с льготным периодом (`quorum_enabled`, `grace_period_sec`), авторетрая транзиентных ошибок (`callWithTransientRetry`) и цепочки запасных судей (`aggregator_fallbacks`). Все опции конфигурируются в пресетах с сохранением 100% обратной совместимости.
@@ -0,0 +1,57 @@
1
+ # План: разбиение lib/client.js (issue #47)
2
+
3
+ Статус: принято решение, реализация отложена до появления подтверждённой механики бандлера.
4
+ Дата: 2026-09-11. Исполнитель: zcode. Связанная issue: #47.
5
+
6
+ ## Контекст
7
+
8
+ Корневой чек-лист code review требует файл ≤800 строк; `lib/client.js` — ~1240 строк
9
+ после батча качества. `MoAEditor` ≈500 строк, словари ≈110 строк, CSS ≈85 строк.
10
+ Прямое разбиение упирается в механику клиентского бандлера DSH.
11
+
12
+ ## Собранный evidence (2026-09-11)
13
+
14
+ 1. **Харнесс отдаёт ровно один модуль на пакет**: на тест-контуре (DSH 0.1.5-rc.2)
15
+ клиент плагина обслуживается по единому URL
16
+ `/plugins/??@goodandready/dsh-moa/client.js&rev=<hash>` (combo-загрузчик);
17
+ реестр модулей в индекс-странице ссылается только на `client.js` пакета.
18
+ 2. **Ни один плагин семейства не использует относительный require в клиентском
19
+ коде**: dsh-lanmode (23 файла в lib/), dsh-tts (client.js 1851 строка),
20
+ dsh-model-sync (17 файлов), dsh-clinebot (5 файлов), dsh-grok-xsearch (14
21
+ файлов) — везде `require('./...')` в client.js отсутствует. Многофайловость
22
+ живёт только в серверной половине.
23
+ 3. Клиентская factory получает `require` (пакетные зависимости: `react`,
24
+ `@deepseek-ai/dsh-client-ui-primitives`) — документированных свидетельств
25
+ поддержки относительных require внутри клиентского модуля нет.
26
+
27
+ ## Варианты
28
+
29
+ - **A. Оставить один файл (принято сейчас).** Нулевой риск для загрузки карточки;
30
+ известный компромисс с чек-листом зафиксирован в issue.
31
+ - **B. Сборочная склейка (concat/минимальный bundler перед `npm pack`).** С.Split
32
+ исходников на части + prepublish-скрипт, собирающий `lib/client.js`.
33
+ Плюс: файлы в репозитории маленькие, публикуется по-прежнему один модуль.
34
+ Минус: в семействе нет ни одного плагина со сборочным шагом — вводит новую
35
+ конвенцию, усложняет publish-пайплайн и локальную отладку.
36
+ - **C. Относительный require в клиенте.** Самый чистый вариант, но требует
37
+ подтверждённой поддержки в бандлере харнесса (эксперимент на тест-контуре).
38
+
39
+ ## Решение и критерии пересмотра
40
+
41
+ - Сейчас — вариант A: риск поломки загрузки карточки выше пользы, а файл после
42
+ батча качества сократился (1240 строк против 1311) и остаётся цельным по смыслу.
43
+ - Пересмотреть к варианту C, если появится подтверждённый пример относительного
44
+ require в клиентском модуле любого плагина семейства (эксперимент: маленький
45
+ пакет-проба `require('./client-part.js')` на тест-контуре + проверка загрузки
46
+ карточки без ошибок в консоли).
47
+ - Пересмотреть к варианту B, если файл превысит ~1800 строк или в семействе
48
+ появится первый плагин со сборочным шагом.
49
+
50
+ ## Чек-лист разбиения (когда механика подтверждена)
51
+
52
+ 1. Вынести словари и `makeT` в `lib/client-dict.js`, стили — в `lib/client-styles.js`,
53
+ `SearchableModelPicker` — в `lib/client-picker.js`.
54
+ 2. `lib/client.js` остаётся единственной точкой входа `__ModuleLoader__.load`.
55
+ 3. Проверки: клиентский модуль отдаётся 200 по per-plugin URL; карточка
56
+ рендерится (settings.plugin.item) без ошибок в консоли; локали регистрируются;
57
+ HMR/обновление соседнего плагина не ломает стили (атрибут data-dsh-plugin).