@goodandready/dsh-moa 0.2.15 → 0.2.16
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.
- package/README.md +7 -0
- package/lib/best-effort.js +38 -0
- package/lib/client.js +7 -4
- package/lib/file-workspace.js +48 -34
- package/lib/history.js +4 -4
- package/lib/index.js +17 -382
- package/lib/moa-candidates.js +225 -0
- package/lib/moa-runner.js +13 -222
- package/lib/routes.js +408 -0
- package/lib/updater.js +280 -0
- package/package.json +1 -2
- package/docs/README.ru.md +0 -287
- package/docs/README.zh.md +0 -243
- package/docs/design/DESIGN.md +0 -79
- package/docs/plans/47-client-js-split-plan.md +0 -57
- package/docs/plans/55-resilience-plan.md +0 -33
- package/docs/plans/59-power-pack-plan.md +0 -73
- package/docs/plans/63-stability-polish-plan.md +0 -15
package/docs/README.ru.md
DELETED
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
# 📦 @goodandready/dsh-moa
|
|
2
|
-
|
|
3
|
-
<div align="center">
|
|
4
|
-
|
|
5
|
-
<h3>Движок мультимодельного взаимодействия и синтеза Mixture of Agents (MoA) для DeepSeek Harness</h3>
|
|
6
|
-
|
|
7
|
-
<p align="center">
|
|
8
|
-
<a href="https://www.npmjs.com/package/@goodandready/dsh-moa"><img src="https://img.shields.io/npm/v/@goodandready/dsh-moa.svg?style=for-the-badge&color=6366f1&labelColor=1e1b4b" alt="npm version"></a>
|
|
9
|
-
<a href="../LICENSE"><img src="https://img.shields.io/github/license/GooDAnDReaDY/dsh-moa.svg?style=for-the-badge&color=10b981&labelColor=064e3b" alt="license"></a>
|
|
10
|
-
<a href="https://github.com/topics/dsh-plugin"><img src="https://img.shields.io/badge/DSH-Plugin-8b5cf6.svg?style=for-the-badge&labelColor=2e1065" alt="DSH Plugin"></a>
|
|
11
|
-
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node-20%2B-f59e0b.svg?style=for-the-badge&labelColor=451a03" alt="Node version"></a>
|
|
12
|
-
</p>
|
|
13
|
-
|
|
14
|
-
<p align="center">
|
|
15
|
-
<a href="https://goodandready.app/"><img src="https://img.shields.io/badge/Все_Проекты_Автора-goodandready.app-ff4500.svg?style=for-the-badge&logo=rocket&logoColor=white&labelColor=1a1a2e" alt="Витрина GoodAndReady"></a>
|
|
16
|
-
</p>
|
|
17
|
-
|
|
18
|
-
<p align="center">
|
|
19
|
-
<a href="README.md"><b>🇬🇧 English</b></a> •
|
|
20
|
-
<a href="README.ru.md"><b>🇷🇺 Русский</b></a> •
|
|
21
|
-
<a href="README.zh.md"><b>🇨🇳 中文说明</b></a>
|
|
22
|
-
</p>
|
|
23
|
-
|
|
24
|
-
<table align="center">
|
|
25
|
-
<tr>
|
|
26
|
-
<td align="center">
|
|
27
|
-
⭐ <strong>Если вам нравится этот плагин, поставьте ему звезду на GitHub</strong> — это покажет мне, что плагин вам полезен, и будет мотивировать меня развивать его дальше.
|
|
28
|
-
<br><br>
|
|
29
|
-
🐛 <strong>Если вы нашли баг или хотите предложить новый функционал</strong>, создайте issue на GitHub на любом языке — я рассмотрю ваше предложение и реализую полезные идеи в одной из следующих версий плагина.
|
|
30
|
-
</td>
|
|
31
|
-
</tr>
|
|
32
|
-
</table>
|
|
33
|
-
|
|
34
|
-
</div>
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
## ⚡ Обзор и решаемая проблема
|
|
39
|
-
|
|
40
|
-
Генерация кода и архитектурных решений силами одной модели часто страдает от слепых зон, предвзятости одного подхода, галлюцинаций в структуре проекта и нестабильного качества на сложных инженерных задачах. При работе с неоднозначными требованиями одиночная модель нередко делает поспешные предположения и выдает монолитный, непроверенный результат.
|
|
41
|
-
|
|
42
|
-
**`@goodandready/dsh-moa`** интегрирует архитектуру **Mixture of Agents (MoA)** прямо в DeepSeek Harness через слеш-команду `/moa`:
|
|
43
|
-
|
|
44
|
-
1. **Адаптивный опросник для уточнения требований**: Если запрос пользователя сформулирован слишком широко или не содержит ключевых деталей, модели-советники формируют уточняющие варианты, а модель-судья синтезирует структурированный интерактивный опросник (2–4 вопроса) до начала генерации кода.
|
|
45
|
-
2. **Параллельный опрос моделей (Proposers) и изоляция на диске**: Несколько независимых моделей анализируют задачу одновременно. Файлы каждого кандидата сохраняются в изолированные директории (`.moa/candidate-N/`), исключая конфликты.
|
|
46
|
-
3. **Оценка флагманским судьей (Judge) и автоматический промоушн файлов**: Модель глубоких рассуждений проводит критический сравнительный анализ всех предложенных решений, выбирает победителя с помощью машинного маркера (`WINNER_CANDIDATE_INDEX: N`) и переносит готовые файлы победителя напрямую в корень проекта.
|
|
47
|
-
4. **Экономия токенов в чате**: Вместо вывода огромных листингов кода в чат формируется компактный отчет с перечнем созданных файлов и архитектурным резюме.
|
|
48
|
-
5. **Одноразовый модификатор сессии**: Команда выполняется в рамках одного такта и автоматически возвращает исходную модель сессии пользователя сразу после завершения.
|
|
49
|
-
6. **Динамический каталог тарифов и подсчет токенов**: Актуальные цены на 300+ моделей автоматически подтягиваются из публичного каталога OpenRouter (без ключей и авторизации), кешируются в `~/.dsh/storages/dsh-moa-catalog.json` на 24 часа, а также поддерживают прямые вендорские тарифы и пользовательские оверрайды `prices` в `settings.yaml`.
|
|
50
|
-
7. **Режим доработки (Refinement Mode)**: Автоматически считывает контекст существующего проекта и генерирует точечные дельта-правки без перетирания всей кодовой базы.
|
|
51
|
-
8. **Быстрый режим (Fast Mode) и критерии судьи**: Режим для одиночных быстрых задач без судьи и гибкая настройка фокуса оценки (безопасность, производительность, минимализм).
|
|
52
|
-
9. **История запусков и лидерборд моделей**: Персистентное логирование всех видов запусков (синтез, fast mode, опросник) и REST-эндпоинты (`/dsh-moa/history`, `/dsh-moa/leaderboard`, `/dsh-moa/runs/<id>`).
|
|
53
|
-
10. **Live Canvas 1-клик предпросмотр (опционально)**: если в профиле установлен `@goodandready/dsh-live-canvas`, промоученный HTML отправляется в его песочницу, а ответ MoA содержит ссылку на предпросмотр в 1 клик; без плагина шаг тихо пропускается.
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
## 🏗️ Архитектура
|
|
58
|
-
|
|
59
|
-
```mermaid
|
|
60
|
-
graph TD
|
|
61
|
-
subgraph Input ["Взаимодействие с пользователем (Композер чата)"]
|
|
62
|
-
Cmd["Слеш-команда: /moa [preset] <запрос>"]
|
|
63
|
-
Gate{"Проверка неоднозначности"}
|
|
64
|
-
QModal["Интерактивные уточняющие вопросы<br/>(Выбор вариантов и текстовые ответы)"]
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
subgraph Proposers ["Слой параллельных советников (Proposers)"]
|
|
68
|
-
P1["Модель 1<br/>(Креативный подход)"]
|
|
69
|
-
P2["Модель 2<br/>(Альтернативный дизайн)"]
|
|
70
|
-
P3["Модель 3<br/>(Производительная стратегия)"]
|
|
71
|
-
WS1[".moa/candidate-1/<br/>(Изолированные файлы)"]
|
|
72
|
-
WS2[".moa/candidate-2/<br/>(Изолированные файлы)"]
|
|
73
|
-
WS3[".moa/candidate-3/<br/>(Изолированные файлы)"]
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
subgraph Judge ["Слой синтеза и промоушна (Judge)"]
|
|
77
|
-
Aggregator["Флагманская модель-судья<br/>(Сравнительный анализ и аудит кода)"]
|
|
78
|
-
WinnerMarker{"WINNER_CANDIDATE_INDEX"}
|
|
79
|
-
Promote["Промоушн файлов победителя<br/>(Перенос в корень и очистка песочниц)"]
|
|
80
|
-
Summary["Компактный отчет<br/>(Обзор файлов и архитектурное резюме)"]
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
Cmd --> Gate
|
|
84
|
-
Gate -->|Широкий/Неточный запрос| QModal
|
|
85
|
-
QModal -->|Ответы пользователя| P1 & P2 & P3
|
|
86
|
-
Gate -->|Точный/Детальный запрос| P1 & P2 & P3
|
|
87
|
-
P1 --> WS1
|
|
88
|
-
P2 --> WS2
|
|
89
|
-
P3 --> WS3
|
|
90
|
-
WS1 & WS2 & WS3 --> Aggregator
|
|
91
|
-
Aggregator --> WinnerMarker
|
|
92
|
-
WinnerMarker --> Promote
|
|
93
|
-
Promote --> Summary
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
---
|
|
97
|
-
|
|
98
|
-
## ✨ Возможности и функциональность
|
|
99
|
-
|
|
100
|
-
### 1. Слеш-команда (`/moa`) и автодополнение
|
|
101
|
-
Плагин интегрируется напрямую в композер DeepSeek Harness. Ввод `/moa` открывает всплывающее меню с готовыми пресетами и автодополнением:
|
|
102
|
-
|
|
103
|
-
```text
|
|
104
|
-
/moa разработай реактивный дашборд с графиками и обновлениями по websocket
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
Или вызов именованного пресета:
|
|
108
|
-
|
|
109
|
-
```text
|
|
110
|
-
/moa code-review проведи аудит middleware авторизации и границ безопасности
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
Эквивалентная форма с флагом:
|
|
114
|
-
|
|
115
|
-
```text
|
|
116
|
-
/moa --preset=deep-reasoning реши эту математическую задачу по шагам
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
### 2. Адаптивный гейт уточнения требований
|
|
120
|
-
Когда запрос сформулирован слишком обобщенно (например, *"сделай калькулятор"*), советники определяют недостающие архитектурные требования и формулируют целевые вопросы (стиль интерфейса, сохранение состояния, стек технологий) до генерации кода.
|
|
121
|
-
|
|
122
|
-
### 3. Параллельный запуск с живыми пульсами прогресса
|
|
123
|
-
* Советники опрашиваются параллельно со статусами выполнения в реальном времени (`⏳ [3s] Processing...`, индивидуальный прогресс каждой модели).
|
|
124
|
-
* Из контекстов советников удаляются громоздкие системные промпты и схемы инструментов, что предотвращает ошибки отказа из-за отсутствия инструментов и экономит контекст.
|
|
125
|
-
|
|
126
|
-
### 4. Файловая изоляция кандидатов и промоушн
|
|
127
|
-
В отличие от обычных чатовых реализаций MoA, `dsh-moa` работает с реальной файловой системой:
|
|
128
|
-
* Каждый советник генерирует файлы в изолированные папки `.moa/candidate-1/`, `.moa/candidate-2/` и т.д.
|
|
129
|
-
* Судья сопоставляет реализации и выбирает лучшую через маркер `WINNER_CANDIDATE_INDEX: N`.
|
|
130
|
-
* Файлы победителя автоматически переносятся в корень рабочей области, а временные папки удаляются.
|
|
131
|
-
|
|
132
|
-
### 5. Нативная карточка настроек и пресеты
|
|
133
|
-
Настройка моделей в меню `Настройки → Плагины → Mixture of Agents`:
|
|
134
|
-
* Выбор моделей-советников (быстрые генеративные модели для разнообразия идей).
|
|
135
|
-
* Выбор модели-судьи (модель глубоких рассуждений для строгого аудита).
|
|
136
|
-
* Конфигурация именованных пресетов (`default`, `fast`, `deep-reasoning`), критериев судьи и температур.
|
|
137
|
-
* Включение/отключение MoA и фактический статус-бейдж хоста; сетка телеметрии показывает общее число запусков и среднюю стоимость.
|
|
138
|
-
|
|
139
|
-
### 6. Live Canvas 1-клик предпросмотр (опционально)
|
|
140
|
-
Если в профиле установлен `@goodandready/dsh-live-canvas`, `dsh-moa` отправляет промоученный HTML-файл в REST-контракт Live Canvas (`POST /dsh-live-canvas/api/preview`, тот же webServer харнесса) и добавляет к ответу ссылку на предпросмотр (`/dsh-live-canvas/sandbox/<id>`). Без плагина шаг пропускается тихо — без ошибок в журнале и без битых ссылок.
|
|
141
|
-
|
|
142
|
-
---
|
|
143
|
-
|
|
144
|
-
## 📦 Установка
|
|
145
|
-
|
|
146
|
-
Установка в веб-профиль DeepSeek Harness:
|
|
147
|
-
|
|
148
|
-
```bash
|
|
149
|
-
dsh plugin --profile web add @goodandready/dsh-moa
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
Перезапустите экземпляр DeepSeek Harness и обновите вкладку в браузере.
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
## ⚡ 10 встроенных пресетов и инженерные персоны
|
|
157
|
-
|
|
158
|
-
В версии v0.2.13 добавлены 10 специализированных пресетов под реальные задачи разработки:
|
|
159
|
-
|
|
160
|
-
| Имя пресета | Назначение | Судья по умолчанию | Рецензия (Round 2) | Слепая оценка |
|
|
161
|
-
| :--- | :--- | :--- | :---: | :---: |
|
|
162
|
-
| `default` | Сбалансированная генерация | `codex:gpt-5.6-sol` | Опционально | Выкл |
|
|
163
|
-
| `code-review` | Глубокое взаимное ревью кода | `codex:gpt-5.6-sol` | Вкл | Вкл |
|
|
164
|
-
| `fast-audit` | Сверхбыстрый экспресс-аудит (Fast Mode) | `codex:gpt-5.6-sol` | Выкл | Выкл |
|
|
165
|
-
| `deep-architect` | Проектирование распределенных систем | `codex:gpt-5.6-sol` | Вкл | Выкл |
|
|
166
|
-
| `bug-hunter` | Поиск скрытых багов и граничных случаев | `codex:gpt-5.6-sol` | Вкл | Выкл |
|
|
167
|
-
| `refactor-cleanup` | Чистка легаси и удаление оверинжиниринга | `codex:gpt-5.6-sol` | Выкл | Выкл |
|
|
168
|
-
| `frontend-ui` | Качественные адаптивные веб-интерфейсы | `codex:gpt-5.6-sol` | Выкл | Выкл |
|
|
169
|
-
| `security-audit` | Анализ уязвимостей и санитайзинг | `codex:gpt-5.6-sol` | Вкл | Вкл |
|
|
170
|
-
| `math-logic` | Алгоритмы, математическая логика и доказательства | `codex:gpt-5.6-sol` | Вкл | Выкл |
|
|
171
|
-
| `creative-brainstorm`| Нестандартные идеи и дивергентный поиск | `codex:gpt-5.6-sol` | Выкл | Выкл |
|
|
172
|
-
|
|
173
|
-
### Инженерные персоны кандидатов (`role_persona`)
|
|
174
|
-
Задавайте кандидатам четкие роли для максимального разнообразия подходов:
|
|
175
|
-
- **`minimalist` (Ponytail)**: решение на стандартной библиотеке, 0 лишних зависимостей, минимальный код.
|
|
176
|
-
- **`robustness`**: защитное программирование, валидация границ, идемпотентность, устойчивость к сбоям.
|
|
177
|
-
- **`performance`**: минимальная алгоритмическая сложность, экономия памяти, zero-copy.
|
|
178
|
-
- **`tester`**: test-driven архитектура, 100% покрытие веток, четкие ассерты.
|
|
179
|
-
- **`general`**: сбалансированный подход общего назначения.
|
|
180
|
-
|
|
181
|
-
---
|
|
182
|
-
|
|
183
|
-
## 🤝 Консилиум Раунд 2, Синтаксический гейт и Override
|
|
184
|
-
|
|
185
|
-
- **Консилиум (Раунд 2)**: флаг `peer_critique_enabled: true` включает этап взаимного ревью, в котором кандидаты изучают предложения оппонентов и дорабатывают код перед финальным судейством.
|
|
186
|
-
- **Синтаксический гейт**: мгновенная валидация JS/JSON через `node:vm` и `JSON.parse`. Если в коде кандидата есть опечатка, он помечается `[⚠️ Syntax Warning]`, а судья получает жесткую директиву: *если архитектура кандидата превосходит конкурентов, исправить синтаксис в финальном решении и присудить ему победу*.
|
|
187
|
-
- **Пользовательский выбор кандидата (Override)**: флаг `allow_candidate_override: true` сохраняет папки `.moa/candidate-N/`. Любой кандидат может быть повышен в проект командой `/moa promote <runId> <candidateIndex>` или кнопкой в карточке настроек.
|
|
188
|
-
|
|
189
|
-
---
|
|
190
|
-
|
|
191
|
-
## ⚙️ Конфигурация (`settings.yaml`)
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
Настройка пресетов и пайплайнов моделей доступна в `settings.yaml` или через интерфейс (Настройки → Плагины → Mixture of Agents):
|
|
195
|
-
|
|
196
|
-
```yaml
|
|
197
|
-
# settings.yaml
|
|
198
|
-
dsh-moa:
|
|
199
|
-
enabled: true
|
|
200
|
-
default_preset: "default"
|
|
201
|
-
prices:
|
|
202
|
-
"my-provider/my-model":
|
|
203
|
-
input: 0.20
|
|
204
|
-
output: 0.80
|
|
205
|
-
"ollama/*":
|
|
206
|
-
input: 0
|
|
207
|
-
output: 0
|
|
208
|
-
presets:
|
|
209
|
-
- name: default
|
|
210
|
-
ask_clarifying_questions: true
|
|
211
|
-
reference_models:
|
|
212
|
-
- provider: "your-fast-provider"
|
|
213
|
-
model: "your-creative-model"
|
|
214
|
-
- provider: "your-fast-provider"
|
|
215
|
-
model: "your-balanced-model"
|
|
216
|
-
aggregator:
|
|
217
|
-
provider: "your-reasoning-provider"
|
|
218
|
-
model: "your-judge-model"
|
|
219
|
-
reference_temperature: 0.6
|
|
220
|
-
aggregator_temperature: 0.4
|
|
221
|
-
max_tokens: 4096
|
|
222
|
-
judge_criteria: ""
|
|
223
|
-
- name: fast
|
|
224
|
-
ask_clarifying_questions: false
|
|
225
|
-
reference_models:
|
|
226
|
-
- provider: "your-fast-provider"
|
|
227
|
-
model: "your-fast-model"
|
|
228
|
-
aggregator:
|
|
229
|
-
provider: "your-fast-provider"
|
|
230
|
-
model: "your-fast-model"
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
### Параметры конфигурации
|
|
234
|
-
|
|
235
|
-
| Параметр | Тип | По умолчанию | Описание |
|
|
236
|
-
|:---|:---|:---|:---|
|
|
237
|
-
| `enabled` | `boolean` | `true` | Главный выключатель команды `/moa`, маршрутизации тактов и `POST /dsh-moa/run` (редактируется в карточке настроек) |
|
|
238
|
-
| `default_preset` | `string` | `"default"` | Пресет по умолчанию, вызываемый командой `/moa <запрос>` без явного пресета |
|
|
239
|
-
| `presets` | `array` | `[...]` | Именованные пресеты; выбираются через `/moa <имя> <запрос>` или `/moa --preset=<имя> <запрос>` |
|
|
240
|
-
| `presets[].reference_models` | `array` | `[...]` | Список моделей-советников, опрашиваемых параллельно |
|
|
241
|
-
| `presets[].aggregator` | `object` | `{...}` | Модель-судья, отвечающая за синтез, критику и выбор победителя |
|
|
242
|
-
| `presets[].ask_clarifying_questions` | `boolean` | `true` | Синтез опросника для широких/неоднозначных запросов (на уровне пресета) |
|
|
243
|
-
| `presets[].curator_synthesis` | `boolean` | `false` | Режим куратора: извлечение сильных сторон решений по рубрике антипаттернов и выбор ведущей модели-сборщика |
|
|
244
|
-
| `presets[].stream_aggregator` | `boolean` | `true` | Потоковый стриминг ответа судьи в реальном времени с нулевым временем первого токена (TTFT) |
|
|
245
|
-
| `presets[].quorum_enabled` | `boolean` | `false` | Защита от зависших моделей (stragglers): запуск синтеза при ответе от >= 60% кандидатов |
|
|
246
|
-
| `presets[].grace_period_sec` | `number` | `10` | Грейс-период (в секундах) ожидания оставшихся моделей после достижения кворума |
|
|
247
|
-
| `presets[].aggregator_fallbacks` | `array` | `[]` | Список запасных моделей-судей при сбоях основной модели агрегатора |
|
|
248
|
-
| `presets[].blind_evaluation` | `boolean` | `false` | Обезличивание имен кандидатов («Candidate 1», «Candidate 2») для исключения предвзятости судьи |
|
|
249
|
-
| `presets[].reference_timeout_sec` | `number` | `60` | Таймаут опроса каждого кандидата в секундах |
|
|
250
|
-
| `presets[].aggregator_timeout_sec` | `number` | `180` | Таймаут синтеза решения судьей в секундах |
|
|
251
|
-
| `presets[].reference_temperature` / `.aggregator_temperature` | `number` | `0.6` / `0.4` | Температуры сэмплирования советников и судьи |
|
|
252
|
-
| `presets[].max_tokens` | `number` | `4096` | Максимум выходных токенов на вызов модели |
|
|
253
|
-
| `presets[].judge_criteria` | `string` | `""` | Опциональные дополнительные критерии оценки для судьи |
|
|
254
|
-
| `prices` | `map` | `{}` | Пользовательские тарифы USD за 1M токенов (`"provider/model"`, `"provider/*"`, `"*"`) для расчета стоимости |
|
|
255
|
-
|
|
256
|
-
> **Примечание о приватности:** в режиме доработки читаемые файлы проекта (до ~16 тыс. символов; dotfile-файлы вида `.env*` исключены) включаются в промпты, отправляемые настроенным моделям-кандидатам и судье. Не запускайте `/moa` в проектах, где не-dotfile файлы содержат секреты.
|
|
257
|
-
|
|
258
|
-
---
|
|
259
|
-
|
|
260
|
-
## 📊 REST API эндпоинты
|
|
261
|
-
|
|
262
|
-
| Эндпоинт | Метод | Описание |
|
|
263
|
-
|:---|:---|:---|
|
|
264
|
-
| `/dsh-moa/status` | `GET` | Снимок здоровья/включенности для статус-бейджа карточки настроек |
|
|
265
|
-
| `/dsh-moa/presets` | `GET` | Возвращает настроенные пресеты MoA и пресет по умолчанию |
|
|
266
|
-
| `/dsh-moa/presets` | `POST` | Заменяет пресеты/пресет по умолчанию/enabled после валидации схемой (400 при невалидном payload) |
|
|
267
|
-
| `/dsh-moa/models` | `GET` | Список моделей, доступных для слотов кандидатов и судьи |
|
|
268
|
-
| `/dsh-moa/history?limit=20&offset=0` | `GET` | История запусков с кандидатами, победителем, токенами и ценой |
|
|
269
|
-
| `/dsh-moa/leaderboard` | `GET` | Лидерборд побед моделей и средняя стоимость генерации |
|
|
270
|
-
| `/dsh-moa/runs/<id>` | `GET` | Возвращает один записанный запуск по id |
|
|
271
|
-
| `/dsh-moa/run` | `POST` | Запускает полный пайплайн MoA по HTTP (400 при `enabled: false`) |
|
|
272
|
-
|
|
273
|
-
---
|
|
274
|
-
|
|
275
|
-
## 🧪 Тестирование
|
|
276
|
-
|
|
277
|
-
Запуск автоматического набора тестов:
|
|
278
|
-
|
|
279
|
-
```bash
|
|
280
|
-
npm test
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
---
|
|
284
|
-
|
|
285
|
-
## 📄 Лицензия
|
|
286
|
-
|
|
287
|
-
MIT © [GooDAnDReaDY](https://github.com/GooDAnDReaDY)
|
package/docs/README.zh.md
DELETED
|
@@ -1,243 +0,0 @@
|
|
|
1
|
-
# 📦 @goodandready/dsh-moa
|
|
2
|
-
|
|
3
|
-
<div align="center">
|
|
4
|
-
|
|
5
|
-
<h3>面向 DeepSeek Harness 的 Mixture of Agents (MoA) 多模型协作与代码综合引擎</h3>
|
|
6
|
-
|
|
7
|
-
<p align="center">
|
|
8
|
-
<a href="https://www.npmjs.com/package/@goodandready/dsh-moa"><img src="https://img.shields.io/npm/v/@goodandready/dsh-moa.svg?style=for-the-badge&color=6366f1&labelColor=1e1b4b" alt="npm version"></a>
|
|
9
|
-
<a href="../LICENSE"><img src="https://img.shields.io/github/license/GooDAnDReaDY/dsh-moa.svg?style=for-the-badge&color=10b981&labelColor=064e3b" alt="license"></a>
|
|
10
|
-
<a href="https://github.com/topics/dsh-plugin"><img src="https://img.shields.io/badge/DSH-Plugin-8b5cf6.svg?style=for-the-badge&labelColor=2e1065" alt="DSH Plugin"></a>
|
|
11
|
-
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node-20%2B-f59e0b.svg?style=for-the-badge&labelColor=451a03" alt="Node version"></a>
|
|
12
|
-
</p>
|
|
13
|
-
|
|
14
|
-
<p align="center">
|
|
15
|
-
<a href="https://goodandready.app/"><img src="https://img.shields.io/badge/作者所有项目-goodandready.app-ff4500.svg?style=for-the-badge&logo=rocket&logoColor=white&labelColor=1a1a2e" alt="GoodAndReady 作品展"></a>
|
|
16
|
-
</p>
|
|
17
|
-
|
|
18
|
-
<p align="center">
|
|
19
|
-
<a href="README.md"><b>🇬🇧 English</b></a> •
|
|
20
|
-
<a href="README.ru.md"><b>🇷🇺 Русский</b></a> •
|
|
21
|
-
<a href="README.zh.md"><b>🇨🇳 中文说明</b></a>
|
|
22
|
-
</p>
|
|
23
|
-
|
|
24
|
-
<table align="center">
|
|
25
|
-
<tr>
|
|
26
|
-
<td align="center">
|
|
27
|
-
⭐ <strong>如果您喜欢这个插件,请在 GitHub 上为它点亮 Star</strong> — 这能让我知道插件对您有用,并鼓励我继续开发和维护它。
|
|
28
|
-
<br><br>
|
|
29
|
-
🐛 <strong>如果您发现 Bug 或希望增加功能</strong>,请使用任意语言在 GitHub 上提交 Issue — 我会评估您的建议,并在后续版本中实现有价值的改进。
|
|
30
|
-
</td>
|
|
31
|
-
</tr>
|
|
32
|
-
</table>
|
|
33
|
-
|
|
34
|
-
</div>
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
## ⚡ 概述与解决的核心痛点
|
|
39
|
-
|
|
40
|
-
在面对复杂的软件工程任务时,单一模型生成往往容易受到视角盲区、架构幻觉以及生成质量不稳定的限制。当用户输入模糊或缺乏技术细节的提示词时,单一模型容易做出主观假设,生成未经充分验证的单体代码。
|
|
41
|
-
|
|
42
|
-
**`@goodandready/dsh-moa`** 通过 `/moa` 斜杠命令将 **Mixture of Agents (MoA)** 混合智能体架构原生引入 DeepSeek Harness:
|
|
43
|
-
|
|
44
|
-
1. **自适应澄清问卷 (Questionnaire Gate)**:针对宽泛或不明确的提示词,顾问模型(Proposers)自动提炼关键分歧点,裁判模型(Judge)在生成代码前合成结构化的 2–4 题交互式问卷。
|
|
45
|
-
2. **多模型并行生成与工作区沙箱隔离**:多个独立模型并行分析任务。每个候选方案的文件生成均写入独立的磁盘沙箱 (`.moa/candidate-N/`),彻底避免跨模型文件污染。
|
|
46
|
-
3. **旗舰裁判模型评估与文件自动提升 (Promotion)**:深度推理模型对所有候选方案进行交叉评审,通过机器标记 (`WINNER_CANDIDATE_INDEX: N`) 评选胜出方案,并将胜出者的完整文件自动同步到项目根目录。
|
|
47
|
-
4. **极简对话摘要与 Token 节省**:对话界面不输出冗长的原始代码块,而是生成整洁的文件清单与架构设计摘要。
|
|
48
|
-
5. **单轮会话即时恢复**:作为一次性会话修改器运行,任务完成后自动恢复用户原本的会话主力模型。
|
|
49
|
-
6. **动态定价目录与 Token 成本估算**:300+ 模型的实时价格自动从 OpenRouter 公开目录后台获取(无需鉴权,缓存于 `~/.dsh/storages/dsh-moa-catalog.json`,24 小时刷新),同时支持直连厂商价格与 `settings.yaml` 中的自定义 `prices` 覆盖。
|
|
50
|
-
7. **增量修改模式 (Refinement Mode)**:自动感知现有代码库上下文,生成精确的增量修改而非破坏性的整文件重写。
|
|
51
|
-
8. **快速模式与自定义评审标准**:面向快速任务的单模型极简管线,以及可自定义的裁判评审准则。
|
|
52
|
-
9. **运行历史与胜率排行榜**:对每一类运行(综合、快速模式、问卷)进行持久化记录,并内置 REST 端点(`/dsh-moa/history`、`/dsh-moa/leaderboard`、`/dsh-moa/runs/<id>`)。
|
|
53
|
-
10. **Live Canvas 一键预览(可选)**:当同一 profile 中安装了 `@goodandready/dsh-live-canvas` 时,提升到项目根目录的 HTML 会被推入其沙箱,MoA 回答附带一键预览链接;未安装时该步骤静默跳过。
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
## 🏗️ 架构图
|
|
58
|
-
|
|
59
|
-
```mermaid
|
|
60
|
-
graph TD
|
|
61
|
-
subgraph Input ["用户交互 (聊天输入框)"]
|
|
62
|
-
Cmd["斜杠命令: /moa [preset] <prompt>"]
|
|
63
|
-
Gate{"模糊需求判断"}
|
|
64
|
-
QModal["交互式澄清问卷<br/>(多选选项与自定义输入)"]
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
subgraph Proposers ["并行顾问模型层 (Proposers)"]
|
|
68
|
-
P1["提案模型 1<br/>(创新方案)"]
|
|
69
|
-
P2["提案模型 2<br/>(替代架构)"]
|
|
70
|
-
P3["提案模型 3<br/>(高性能策略)"]
|
|
71
|
-
WS1[".moa/candidate-1/<br/>(隔离文件)"]
|
|
72
|
-
WS2[".moa/candidate-2/<br/>(隔离文件)"]
|
|
73
|
-
WS3[".moa/candidate-3/<br/>(隔离文件)"]
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
subgraph Judge ["综合评估与提升层 (Judge)"]
|
|
77
|
-
Aggregator["旗舰裁判模型<br/>(交叉对比与代码审查)"]
|
|
78
|
-
WinnerMarker{"WINNER_CANDIDATE_INDEX"}
|
|
79
|
-
Promote["提升胜出者文件<br/>(移至根目录并清理沙箱)"]
|
|
80
|
-
Summary["紧凑型摘要<br/>(文件清单与架构亮点)"]
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
Cmd --> Gate
|
|
84
|
-
Gate -->|需求宽泛/模糊| QModal
|
|
85
|
-
QModal -->|用户确认选项| P1 & P2 & P3
|
|
86
|
-
Gate -->|需求明确/详尽| P1 & P2 & P3
|
|
87
|
-
P1 --> WS1
|
|
88
|
-
P2 --> WS2
|
|
89
|
-
P3 --> WS3
|
|
90
|
-
WS1 & WS2 & WS3 --> Aggregator
|
|
91
|
-
Aggregator --> WinnerMarker
|
|
92
|
-
WinnerMarker --> Promote
|
|
93
|
-
Promote --> Summary
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
---
|
|
97
|
-
|
|
98
|
-
## ✨ 特性与能力
|
|
99
|
-
|
|
100
|
-
### 1. 斜杠命令 (`/moa`) 与实时补全
|
|
101
|
-
深度集成于 DeepSeek Harness 输入框。输入 `/moa` 即可触发预设菜单与自动补全:
|
|
102
|
-
|
|
103
|
-
```text
|
|
104
|
-
/moa 开发一个包含图表与 WebSocket 实时更新的响应式仪表盘
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
或指定命名预设:
|
|
108
|
-
|
|
109
|
-
```text
|
|
110
|
-
/moa code-review 审查身份验证中间件和安全边界
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
等效的 flag 形式:
|
|
114
|
-
|
|
115
|
-
```text
|
|
116
|
-
/moa --preset=deep-reasoning 逐步求解这道数学题
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
### 2. 自适应澄清问卷
|
|
120
|
-
当需求过于抽象(例如 *"制作一个计算器"*)时,系统会在生成代码前主动询问 UI 风格、数据持久化方式或框架偏好。
|
|
121
|
-
|
|
122
|
-
### 3. 并行调用与实时心跳反馈
|
|
123
|
-
* 多个顾问模型并发执行,并伴随实时心跳进度条 (`⏳ [3s] Processing...`,显示各模型独立进度)。
|
|
124
|
-
* 自动清理顾问上下文中的冗余系统提示词与工具定义,消除“缺少工具”的拒绝报错并大幅节约 Token。
|
|
125
|
-
|
|
126
|
-
### 4. 磁盘级沙箱隔离与胜出者提升
|
|
127
|
-
与仅停留在聊天文本层面的 MoA 不同,`dsh-moa` 针对真实工程项目:
|
|
128
|
-
* 各提案模型在 `.moa/candidate-1/`、`.moa/candidate-2/` 等独立目录生成工程代码。
|
|
129
|
-
* 裁判模型对比各版本实现,通过 `WINNER_CANDIDATE_INDEX: N` 指定最优方案。
|
|
130
|
-
* 胜出方案自动提升至项目根目录,临时沙箱随后自动清理。
|
|
131
|
-
|
|
132
|
-
### 5. 原生设置卡片与预设管理
|
|
133
|
-
在 `设置 → 插件 → Mixture of Agents` 中可视化配置模型:
|
|
134
|
-
* 配置顾问模型列表(快速生成多样化构想)。
|
|
135
|
-
* 配置裁判模型(强推理模型进行严谨审查)。
|
|
136
|
-
* 自定义命名预设 (`default`, `fast`, `deep-reasoning`)、裁判评审准则与温度。
|
|
137
|
-
* 启用/停用 MoA 开关并查看真实的主机状态徽章;遥测网格展示总运行次数与平均运行成本。
|
|
138
|
-
|
|
139
|
-
### 6. Live Canvas 一键预览(可选)
|
|
140
|
-
若同一 profile 中安装了 `@goodandready/dsh-live-canvas`,`dsh-moa` 会将提升后的 HTML 文件推送到 Live Canvas 的 REST 契约(`POST /dsh-live-canvas/api/preview`,由同一 harness webServer 提供服务),并在回答中附上一键预览链接(`/dsh-live-canvas/sandbox/<id>`)。未安装该插件时此步骤静默跳过——日志无报错,也不会出现死链接。
|
|
141
|
-
|
|
142
|
-
---
|
|
143
|
-
|
|
144
|
-
## 📦 安装
|
|
145
|
-
|
|
146
|
-
在 DeepSeek Harness Web 配置文件中安装:
|
|
147
|
-
|
|
148
|
-
```bash
|
|
149
|
-
dsh plugin --profile web add @goodandready/dsh-moa
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
重启 DeepSeek Harness 实例并刷新浏览器页面。
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
## ⚙️ 配置 (`settings.yaml`)
|
|
157
|
-
|
|
158
|
-
可在 `settings.yaml` 中配置预设与模型管道,或通过 Web UI 设置面板(设置 → 插件 → Mixture of Agents)进行调整:
|
|
159
|
-
|
|
160
|
-
```yaml
|
|
161
|
-
# settings.yaml
|
|
162
|
-
dsh-moa:
|
|
163
|
-
enabled: true
|
|
164
|
-
default_preset: "default"
|
|
165
|
-
prices:
|
|
166
|
-
"my-provider/my-model":
|
|
167
|
-
input: 0.20
|
|
168
|
-
output: 0.80
|
|
169
|
-
"ollama/*":
|
|
170
|
-
input: 0
|
|
171
|
-
output: 0
|
|
172
|
-
presets:
|
|
173
|
-
- name: default
|
|
174
|
-
ask_clarifying_questions: true
|
|
175
|
-
reference_models:
|
|
176
|
-
- provider: "your-fast-provider"
|
|
177
|
-
model: "your-creative-model"
|
|
178
|
-
- provider: "your-fast-provider"
|
|
179
|
-
model: "your-balanced-model"
|
|
180
|
-
aggregator:
|
|
181
|
-
provider: "your-reasoning-provider"
|
|
182
|
-
model: "your-judge-model"
|
|
183
|
-
reference_temperature: 0.6
|
|
184
|
-
aggregator_temperature: 0.4
|
|
185
|
-
max_tokens: 4096
|
|
186
|
-
judge_criteria: ""
|
|
187
|
-
- name: fast
|
|
188
|
-
ask_clarifying_questions: false
|
|
189
|
-
reference_models:
|
|
190
|
-
- provider: "your-fast-provider"
|
|
191
|
-
model: "your-fast-model"
|
|
192
|
-
aggregator:
|
|
193
|
-
provider: "your-fast-provider"
|
|
194
|
-
model: "your-fast-model"
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
### 配置项说明
|
|
198
|
-
|
|
199
|
-
| 参数 | 类型 | 默认值 | 说明 |
|
|
200
|
-
|:---|:---|:---|:---|
|
|
201
|
-
| `enabled` | `boolean` | `true` | `/moa` 命令、回合路由与 `POST /dsh-moa/run` 的总开关(可在设置卡片中切换) |
|
|
202
|
-
| `default_preset` | `string` | `"default"` | 输入 `/moa <prompt>` 且未显式指定预设时调用的预设 |
|
|
203
|
-
| `presets` | `array` | `[...]` | 命名预设列表;通过 `/moa <name> <prompt>` 或 `/moa --preset=<name> <prompt>` 选择 |
|
|
204
|
-
| `presets[].reference_models` | `array` | `[...]` | 并行提案阶段并发调用的顾问模型列表 |
|
|
205
|
-
| `presets[].aggregator` | `object` | `{...}` | 负责综合评审、代码审查与裁决胜出者的裁判模型 |
|
|
206
|
-
| `presets[].ask_clarifying_questions` | `boolean` | `true` | 针对宽泛需求合成澄清问卷(预设级别开关) |
|
|
207
|
-
| `presets[].reference_temperature` / `.aggregator_temperature` | `number` | `0.6` / `0.4` | 顾问与裁判的采样温度 |
|
|
208
|
-
| `presets[].max_tokens` | `number` | `4096` | 每次模型调用的最大输出 Token 数 |
|
|
209
|
-
| `presets[].judge_criteria` | `string` | `""` | 传给裁判的可选附加评审准则 |
|
|
210
|
-
| `prices` | `map` | `{}` | 自定义美元/百万 Token 费率(`"provider/model"`、`"provider/*"`、`"*"`),用于成本估算 |
|
|
211
|
-
|
|
212
|
-
> **隐私提示:** 在增量修改模式下,可读的项目文件(最多约 1.6 万字符;`.env*` 等点文件已被排除)会随提示词发送给所配置的候选模型与裁判模型。请勿在非点文件中包含密钥的项目里运行 `/moa`。
|
|
213
|
-
|
|
214
|
-
---
|
|
215
|
-
|
|
216
|
-
## 📊 REST API 端点
|
|
217
|
-
|
|
218
|
-
| 端点 | 方法 | 说明 |
|
|
219
|
-
|:---|:---|:---|
|
|
220
|
-
| `/dsh-moa/status` | `GET` | 供设置卡片状态徽章使用的健康/启用状态快照 |
|
|
221
|
-
| `/dsh-moa/presets` | `GET` | 返回已配置的 MoA 预设与默认预设 |
|
|
222
|
-
| `/dsh-moa/presets` | `POST` | 经 schema 校验后替换预设/默认预设/enabled(非法载荷返回 400) |
|
|
223
|
-
| `/dsh-moa/models` | `GET` | 列出可用于候选/裁判槽位的模型 |
|
|
224
|
-
| `/dsh-moa/history?limit=20&offset=0` | `GET` | 返回近期运行记录(含候选、胜出者、Token 与成本) |
|
|
225
|
-
| `/dsh-moa/leaderboard` | `GET` | 计算模型胜率排行榜与平均执行成本 |
|
|
226
|
-
| `/dsh-moa/runs/<id>` | `GET` | 按 id 返回单条运行记录 |
|
|
227
|
-
| `/dsh-moa/run` | `POST` | 通过 HTTP 运行完整 MoA 管线(`enabled: false` 时返回 400) |
|
|
228
|
-
|
|
229
|
-
---
|
|
230
|
-
|
|
231
|
-
## 🧪 测试
|
|
232
|
-
|
|
233
|
-
运行自动化测试套件:
|
|
234
|
-
|
|
235
|
-
```bash
|
|
236
|
-
npm test
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
---
|
|
240
|
-
|
|
241
|
-
## 📄 许可证
|
|
242
|
-
|
|
243
|
-
MIT © [GooDAnDReaDY](https://github.com/GooDAnDReaDY)
|
package/docs/design/DESIGN.md
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
# DESIGN.md — dsh-moa
|
|
2
|
-
|
|
3
|
-
## Product / Purpose
|
|
4
|
-
- Назначение: Плагин для DeepSeek Harness, реализующий архитектуру Mixture of Agents (MoA) через команду `/moa <prompt>`. Позволяет параллельно генерировать варианты решения задачи несколькими моделями-кандидатами (proposers / reference models), после чего ведущая модель-агрегатор (judge / aggregator) оценивает ответы, отбирает лучшее, устраняет ошибки, продвигает созданные файлы в корень проекта и синтезирует итоговый результат. После завершения команды агент автоматически возвращается к основной модели текущей сессии.
|
|
5
|
-
- Аудитория: Пользователи DeepSeek Harness, решающие сложные инженерные, исследовательские, математические и архитектурные задачи, требующие ансамбля моделей и перекрёстной валидации.
|
|
6
|
-
- Статус: Active Development / Production Ready (quality-audit batch 2026-09-11: честная аналитика, English-canonical UI, безопасность сбора контекста)
|
|
7
|
-
|
|
8
|
-
## User Surfaces
|
|
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
|
-
|
|
15
|
-
## Visual Direction & ClineBot Alignment
|
|
16
|
-
- Атмосфера: Строгий нативный UI ядра DeepSeek Harness, гармонично встроенный в существующий интерфейс без визуального шума.
|
|
17
|
-
- Утверждённый эталонный стиль: `dsh-clinebot` — чистые карточки секций `.moa-section-card`, информативная шапка `.moa-header` со статусными бейджами реального времени (`.moa-badge-ok`, `.moa-badge-brand`), сегментированные группы переключателей `.moa-seg-group`, ползунки температуры с числовыми бейджами `.moa-slider-badge`, сетка статистики `.moa-stat-box`.
|
|
18
|
-
- Не копировать: Сторонние UI-библиотеки, неродные шрифты, кастомные акцентные цвета.
|
|
19
|
-
|
|
20
|
-
## Foundations
|
|
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
|
-
|
|
26
|
-
## Components And States
|
|
27
|
-
- Компоненты:
|
|
28
|
-
1. `MoACard` / `MoAEditor` — панель настройки плагина со статусной строкой, секциями пресетов, советников, судьи, телеметрией и переключателем `enabled`.
|
|
29
|
-
2. `SearchableModelPicker` — быстрый выпадающий поиск моделей по провайдеру/названию с фильтрацией и поддержкой произвольных моделей.
|
|
30
|
-
3. `MoAErrorBoundary` — изоляция UI-ошибок с кнопкой повторной попытки.
|
|
31
|
-
- Loading / empty / error / success:
|
|
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; при отсутствии данных — «—».
|
|
37
|
-
- Формы, валидация и действия: Валидация наличия хотя бы одного советника и одного агрегатора.
|
|
38
|
-
|
|
39
|
-
## User Flows
|
|
40
|
-
- Критические сценарии:
|
|
41
|
-
1. Пользователь вводит `/moa <вопрос>` в composer:
|
|
42
|
-
- При вводе `/` отображается пункт `moa` в списке слэш-команд.
|
|
43
|
-
- После отправки запускается parallel fan-out на советников с живым отображением прогресса в чате.
|
|
44
|
-
- Агрегатор оценивает варианты, отбирает лучший код и синтезирует результат.
|
|
45
|
-
- Следующее сообщение автоматически выполняется на основной модели сессии.
|
|
46
|
-
2. Пользователь настраивает пресет в «Настройки -> Плагины -> Настройки плагинов -> Mixture of Agents»:
|
|
47
|
-
- Выбор кандидатов из доступных в `ctx.llm`.
|
|
48
|
-
- Выбор агрегатора и настройка температуры.
|
|
49
|
-
- Включение/отключение опросника уточняющих вопросов.
|
|
50
|
-
- Сохранение настроек через `settingsScope` / REST без перезапуска сервера.
|
|
51
|
-
|
|
52
|
-
## Locked Design Decisions
|
|
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-12 — Реализован режим слепого судейства (`blind_evaluation: boolean`), гарантированное зеркалирование языка запроса (Language Mirroring Guard в промптах судьи и куратора), интерактивный лидерборд моделей (винрейт, запуски, победы, средняя стоимость) в секции аналитики UI и раздельные настройки таймаутов кандидатов и судьи в карточке настроек (Gitea Issue #57).
|
|
62
|
-
- 2026-09-11 — Статусный бейдж карточки отражает фактический `GET /dsh-moa/status` (online / offline / disabled); телеметрия Total Runs / Avg Run Cost берётся из `GET /dsh-moa/history`. Причина: карточка не должна показывать состояния, которые она не проверяла.
|
|
63
|
-
- 2026-09-11 — Переключатель `enabled` в карточке сохраняется через `settingsScope`/REST и влияет на `/moa`-turn и `POST /dsh-moa/run`.
|
|
64
|
-
- 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>` теперь создаётся реальной песочницей.
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
- 2026-09-12 — Реализация кураторского синтеза (`curator_synthesis`), строгой рубрики антипаттернов (`ANTIPATTERNS_RUBRIC`), живого потокового стриминга куратора (`stream_aggregator`), кворума кандидатов с льготным периодом (`quorum_enabled`, `grace_period_sec`), авторетрая транзиентных ошибок (`callWithTransientRetry`) и цепочки запасных судей (`aggregator_fallbacks`). Все опции конфигурируются в пресетах с сохранением 100% обратной совместимости.
|
|
68
|
-
|
|
69
|
-
- 2026-09-12 (вечер) — Декомпозиция lib/moa-runner.js на специализированные модули (`lib/moa-prompts.js`, `lib/moa-parser.js`, `lib/moa-runner.js`) с соблюдением канонического лимита <= 800 строк. Реализация автоматической ротации истории при превышении 10 МБ (`rotateHistoryFileIfNeeded`) и неблокирующего асинхронного сохранения (`recordMoaRunAsync`). Настраиваемые таймауты кандидатов и агрегатора (`reference_timeout_sec`, `aggregator_timeout_sec`).
|
|
70
|
-
|
|
71
|
-
- 2026-09-13 — Расширение функционала MoA (Gitea Issue #59): интерактивный селектор альтернативного кандидата в чате (User Candidate Override: allow_candidate_override), пакет из 10 специализированных пресетов с ролями кандидатов (role_persona), локальный гейт синтаксической проверки (Syntax Pre-check Gate) с директивой автоисправления синтаксиса судьёй, режим взаимного рецензирования («Консилиум» / Peer Critique Round 2: peer_critique_enabled), фильтрация лидерборда по пресетам и выгрузка телеметрии в CSV/JSON.
|
|
72
|
-
|
|
73
|
-
- 2026-09-13 — Приведение локализации плагина в строгое соответствие со стандартами dhs-plugin-release-workflow и dsh-plugin-authoring (Gitea Issue #61): добавление полного китайского словаря (zh) в lib/client.js наряду с каноническим английским (en), удаление захардкоженных русских строк в серверной части (lib/moa-parser.js, lib/moa-runner.js), интернационализация эвристик в lib/file-workspace.js и lib/moa-prompts.js (en + zh), создание issue в goodandready/dsh-russian-lang для русификации.
|
|
74
|
-
|
|
75
|
-
## 2026-09-15: Pipeline Stability & Quality Polish (#63)
|
|
76
|
-
- **Refinement Context**: `formatProjectContext(files)` serializes workspace files as fenced Markdown code blocks. `moa-runner.js` passes collected files into `isRefinementTask(prompt, files)`.
|
|
77
|
-
- **Round 2 Persistence**: Candidate file refinements from Round 2 are persisted to `.moa/candidate-N/` via `writeCandidateWorkspace`.
|
|
78
|
-
- **AbortSignal Lifecycle**: `signal` is propagated end-to-end to terminate parallel LLM calls immediately when user aborts or disconnects.
|
|
79
|
-
- **Token Protection**: Peer critique prompts summarize oversized competitor code blocks (>3000 chars) to prevent context window exhaustion.
|