@goodandready/dsh-moa 0.2.11 → 0.2.13

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 CHANGED
@@ -17,10 +17,20 @@
17
17
 
18
18
  <p align="center">
19
19
  <a href="README.md"><b>🇬🇧 English</b></a> •
20
- <a href="docs/README.ru.md"><b>🇷🇺 Русский</b></a> •
21
- <a href="docs/README.zh.md"><b>🇨🇳 中文说明</b></a>
20
+ <a href="README.ru.md"><b>🇷🇺 Русский</b></a> •
21
+ <a href="README.zh.md"><b>🇨🇳 中文说明</b></a>
22
22
  </p>
23
23
 
24
+ <table align="center">
25
+ <tr>
26
+ <td align="center">
27
+ ⭐ <strong>If you like this plugin, please star it on GitHub</strong> — it shows me that the plugin is useful to you and motivates me to keep developing it.
28
+ <br><br>
29
+ 🐛 <strong>If you find a bug or would like to request a feature</strong>, open a GitHub issue in any language — I will review your proposal and implement useful suggestions in a future plugin version.
30
+ </td>
31
+ </tr>
32
+ </table>
33
+
24
34
  </div>
25
35
 
26
36
  ---
@@ -143,8 +153,44 @@ Restart your DeepSeek Harness instance and refresh the browser.
143
153
 
144
154
  ---
145
155
 
156
+ ## ⚡ 10 Specialized Built-in Presets & Candidate Personas
157
+
158
+ v0.2.13 introduces 10 ready-to-use presets engineered for real-world software workflows:
159
+
160
+ | Preset Name | Purpose | Default Aggregator | Peer Critique | Blind Eval |
161
+ | :--- | :--- | :--- | :---: | :---: |
162
+ | `default` | Balanced multi-model generation | `codex:gpt-5.6-sol` | Optional | Off |
163
+ | `code-review` | Thorough peer review & vulnerability detection | `codex:gpt-5.6-sol` | On | On |
164
+ | `fast-audit` | Ultra-fast single-model audit (Fast Mode) | `codex:gpt-5.6-sol` | Off | Off |
165
+ | `deep-architect` | Distributed systems & complex architectures | `codex:gpt-5.6-sol` | On | Off |
166
+ | `bug-hunter` | Root cause discovery & adversarial edge cases | `codex:gpt-5.6-sol` | On | Off |
167
+ | `refactor-cleanup` | Dead-code pruning & standard-library simplicity | `codex:gpt-5.6-sol` | Off | Off |
168
+ | `frontend-ui` | High-fidelity responsive web interfaces | `codex:gpt-5.6-sol` | Off | Off |
169
+ | `security-audit` | Zero-trust threat analysis & sanitization | `codex:gpt-5.6-sol` | On | On |
170
+ | `math-logic` | Deterministic algorithmic proofs & math logic | `codex:gpt-5.6-sol` | On | Off |
171
+ | `creative-brainstorm`| Divergent lateral thinking & ideation | `codex:gpt-5.6-sol` | Off | Off |
172
+
173
+ ### Candidate Personas (`role_persona`)
174
+ Assign archetypal engineering mentalities to individual candidate slots to ensure genuine perspective divergence:
175
+ - **`minimalist` (Ponytail Senior)**: standard library first, zero external dependencies, minimal moving parts.
176
+ - **`robustness`**: defensive coding, boundary validation, graceful fallback handling, idempotent operations.
177
+ - **`performance`**: algorithmic complexity minimization, memory efficiency, zero-copy operations.
178
+ - **`tester`**: test-driven methodology, high branch coverage, explicit assertion design.
179
+ - **`general`**: balanced standard engineering approach.
180
+
181
+ ---
182
+
183
+ ## 🤝 Consilium Round 2 (Peer Critique) & Syntax Auto-Fix Gate
184
+
185
+ - **Consilium (Round 2)**: Enable `peer_critique_enabled: true` in preset settings. Each candidate receives peer proposals and submits an improved, hardened iteration before judge evaluation.
186
+ - **Syntax Pre-Check Gate**: In-memory JS/MJS and JSON syntax verification runs automatically on all candidate files. If a proposal contains syntax errors, it is flagged with `[⚠️ Syntax Warning]` and the judge receives a strict mandate: *if this candidate has superior design, auto-correct the syntax in the synthesized deliverable and award them the win*.
187
+ - **User Candidate Override**: Enable `allow_candidate_override: true` to preserve candidate sandboxes in `.moa/candidate-N/`. At any time, promote any candidate using `/moa promote <runId> <candidateIndex>` or the UI button.
188
+
189
+ ---
190
+
146
191
  ## ⚙️ Configuration (`settings.yaml`)
147
192
 
193
+
148
194
  Configure presets and model pipelines in `settings.yaml` or through the Web UI Settings panel (Settings → Plugins → Mixture of Agents):
149
195
 
150
196
  ```yaml
@@ -199,6 +245,7 @@ dsh-moa:
199
245
  | `presets[].quorum_enabled` | `boolean` | `false` | Straggler mitigation: proceed with synthesis once >= 60% candidates respond |
200
246
  | `presets[].grace_period_sec` | `number` | `10` | Grace period in seconds to wait for stragglers after quorum is reached |
201
247
  | `presets[].aggregator_fallbacks` | `array` | `[]` | Ordered fallback judge models tried if primary aggregator encounters transient errors |
248
+ | `presets[].blind_evaluation` | `boolean` | `false` | Anonymize candidate model names for the judge/curator to eliminate family/brand bias |
202
249
  | `presets[].reference_timeout_sec` | `number` | `60` | Per-candidate execution timeout in seconds |
203
250
  | `presets[].aggregator_timeout_sec` | `number` | `180` | Aggregator/judge synthesis timeout in seconds |
204
251
  | `presets[].reference_temperature` / `.aggregator_temperature` | `number` | `0.6` / `0.4` | Sampling temperatures for proposers and judge |
package/README.ru.md ADDED
@@ -0,0 +1,287 @@
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] &lt;запрос&gt;"]
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/README.zh.md ADDED
@@ -0,0 +1,243 @@
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] &lt;prompt&gt;"]
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)