@goodandready/dsh-moa 0.2.15 → 0.2.17
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 +172 -4
- package/lib/file-workspace.js +71 -37
- package/lib/history.js +4 -4
- package/lib/index.js +18 -382
- package/lib/moa-candidates.js +225 -0
- package/lib/moa-parser.js +6 -0
- package/lib/moa-runner.js +29 -224
- package/lib/routes.js +412 -0
- package/lib/updater.js +282 -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/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.
|
|
@@ -1,57 +0,0 @@
|
|
|
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).
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# Task Plan: MoA Resilience, Async I/O, Configurable Timeouts and Modularization
|
|
2
|
-
|
|
3
|
-
Issue: #55
|
|
4
|
-
Branch: `feat/moa-resilience-refactor`
|
|
5
|
-
Worktree: `/mnt/external/Project/DEV/dhsplugins/dsh-moa/.worktrees/feat/moa-resilience-refactor`
|
|
6
|
-
|
|
7
|
-
## Objectives
|
|
8
|
-
1. Modularize `lib/moa-runner.js` into clean, focused modules under 800 lines:
|
|
9
|
-
- `lib/moa-prompts.js`: Rubric, system prompts, synthesis and questionnaire prompts.
|
|
10
|
-
- `lib/moa-parser.js`: Output parsing, winner extraction, recommended assembler, file block extraction.
|
|
11
|
-
- `lib/moa-runner.js`: Focused pipeline orchestrator.
|
|
12
|
-
2. Optimize storage in `lib/history.js`:
|
|
13
|
-
- Non-blocking async append via `fs.promises.appendFile`.
|
|
14
|
-
- File size rotation (>10MB or >5000 lines -> `.jsonl.1` backup).
|
|
15
|
-
- Fast tail reader for paginated history to avoid loading gigantic files in memory.
|
|
16
|
-
3. Configurable timeouts in `lib/index.js` and `PresetSchema`:
|
|
17
|
-
- `reference_timeout_sec` (default: 60s).
|
|
18
|
-
- `aggregator_timeout_sec` (default: 180s).
|
|
19
|
-
- Forward timeouts into `callLlm` and `AbortController`.
|
|
20
|
-
4. Fallback recovery on malformed judge output:
|
|
21
|
-
- When judge output is empty or truncated, cleanly fall back to `aggregator_fallbacks` before degrading.
|
|
22
|
-
5. Verification & Tests:
|
|
23
|
-
- Add unit tests in `test/moa-resilience.test.mjs`.
|
|
24
|
-
- Verify existing 60/60 tests pass without regression.
|
|
25
|
-
- Update `docs/design/DESIGN.md` and README files.
|
|
26
|
-
|
|
27
|
-
## Phases
|
|
28
|
-
- [x] Phase 1: Planning & Setup (Issue #55, isolated worktree created, test suite verified)
|
|
29
|
-
- [ ] Phase 2: Modularization of moa-runner (`lib/moa-prompts.js`, `lib/moa-parser.js`)
|
|
30
|
-
- [ ] Phase 3: History Storage Rotation & Async I/O (`lib/history.js`)
|
|
31
|
-
- [ ] Phase 4: Configurable Timeouts & Fallback Recovery (`lib/index.js`, `lib/moa-runner.js`)
|
|
32
|
-
- [ ] Phase 5: Test Coverage & Verification (`test/moa-resilience.test.mjs`)
|
|
33
|
-
- [ ] Phase 6: Documentation, PR, Merge, Release & Deploy
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
# Plan 59: MoA Power Pack v0.2.13
|
|
2
|
-
|
|
3
|
-
## Objectives
|
|
4
|
-
Implement the 5 approved feature expansions for `@goodandready/dsh-moa`:
|
|
5
|
-
1. User Candidate Override (`allow_candidate_override: boolean`).
|
|
6
|
-
2. 10 specialized built-in presets + candidate role personas (`role_persona`).
|
|
7
|
-
3. Syntax Pre-check Gate with Judge Auto-Fix Directive.
|
|
8
|
-
4. Consilium / Peer Critique Round 2 (`peer_critique_enabled: boolean`).
|
|
9
|
-
5. Analytics filtering by preset and CSV/JSON export.
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
## Technical Specifications
|
|
14
|
-
|
|
15
|
-
### 1. User Candidate Override
|
|
16
|
-
- **Schema**: `PresetSchema` field `allow_candidate_override: z.boolean().default(false)`.
|
|
17
|
-
- **Backend**:
|
|
18
|
-
- `writeCandidateWorkspace` stores candidates in `.moa-workspaces/<runId>/candidate-<index>`.
|
|
19
|
-
- Add API route `POST /dsh-moa/promote` with `{ runId, candidateIndex }` that promotes specified candidate files to the project root.
|
|
20
|
-
- In `formatMoAResponse`, if enabled, render interactive action hints:
|
|
21
|
-
`🔄 Alternative Candidate Override: /moa promote <runId> <candidateIndex>`
|
|
22
|
-
- **Client**: Add toggle in Section 1 / Section 3 of `lib/client.js`.
|
|
23
|
-
|
|
24
|
-
### 2. 10 Built-in Presets & Candidate Role Personas
|
|
25
|
-
- **Presets**:
|
|
26
|
-
1. `default`: General MoA ensemble.
|
|
27
|
-
2. `code-review`: Zero regressions, backward compatibility, edge cases.
|
|
28
|
-
3. `fast-audit`: Quorum mitigation, low latency.
|
|
29
|
-
4. `deep-architect`: System architecture, API contracts, curator synthesis.
|
|
30
|
-
5. `bug-hunter`: Concurrency, race conditions, memory leaks, null safety.
|
|
31
|
-
6. `refactor-cleanup`: Ponytail minimalism, stdlib first, zero external dependencies.
|
|
32
|
-
7. `frontend-ui`: Ergonomics, DSH design tokens, responsive layout, no AI slop.
|
|
33
|
-
8. `security-audit`: OWASP Top 10, input sanitization, safe error handling.
|
|
34
|
-
9. `math-logic`: Algorithmic correctness, asymptotic proofs.
|
|
35
|
-
10. `creative-brainstorm`: High divergence, alternative architectures.
|
|
36
|
-
- **Candidate Roles (`role_persona`)**:
|
|
37
|
-
- `minimalist`: Ponytail style, stdlib only, fewest lines.
|
|
38
|
-
- `robustness`: Paranoid validation, edge cases, defensive typing.
|
|
39
|
-
- `performance`: Memory efficiency, asymptotic complexity.
|
|
40
|
-
- `tester`: TDD, unit test coverage, mock isolation.
|
|
41
|
-
- `general`: Standard expert proposer.
|
|
42
|
-
|
|
43
|
-
### 3. Syntax Pre-check Gate with Judge Auto-fix Directive
|
|
44
|
-
- **Checker**:
|
|
45
|
-
- JS/MJS/CJS: `new vm.Script(code)` from built-in `node:vm` (instant, memory-safe).
|
|
46
|
-
- JSON: `JSON.parse(code)`.
|
|
47
|
-
- Python: `python3 -m py_compile`.
|
|
48
|
-
- **Judge Directive**:
|
|
49
|
-
- If a candidate has a syntax warning, inform the judge:
|
|
50
|
-
`CRITICAL JUDGE DIRECTIVE: If Candidate X has the best overall architecture or solution despite this syntax error, DO NOT reject them! You MUST correct the syntax error directly during final code synthesis and declare Candidate X the winner.`
|
|
51
|
-
|
|
52
|
-
### 4. Consilium / Peer Critique Round 2
|
|
53
|
-
- **Schema**: `peer_critique_enabled: z.boolean().default(false)`.
|
|
54
|
-
- **Pipeline**:
|
|
55
|
-
- If enabled and `candidates.length >= 2`, run Round 2:
|
|
56
|
-
- Pass anonymized candidate proposals to each proposer.
|
|
57
|
-
- Collect refined solutions with peer critique.
|
|
58
|
-
- Supply improved proposals to Judge/Curator.
|
|
59
|
-
|
|
60
|
-
### 5. Analytics Filtering & CSV/JSON Export
|
|
61
|
-
- **Leaderboard Filter**: `getMoaLeaderboard(historyFilePath, limit, filterPreset)`.
|
|
62
|
-
- **Export Endpoints**:
|
|
63
|
-
- `GET /dsh-moa/leaderboard?preset=<name>&format=json|csv`.
|
|
64
|
-
- **Client UI**:
|
|
65
|
-
- Dropdown filter by preset in Section 4.
|
|
66
|
-
- `Export CSV` / `Export JSON` action buttons.
|
|
67
|
-
|
|
68
|
-
---
|
|
69
|
-
|
|
70
|
-
## Verification
|
|
71
|
-
- Unit tests for all 5 features in `test/moa-power-pack.test.mjs`.
|
|
72
|
-
- Total test suite passing with 0 regressions.
|
|
73
|
-
- Live deployment to `/home/vadim/.dsh/profiles/web` on MiniPC and endpoint verification.
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# Implementation Plan - Issue #63: Pipeline Stability and Quality Polish
|
|
2
|
-
|
|
3
|
-
## 1. Context & Objectives
|
|
4
|
-
Polish runtime stability, error recovery, token efficiency, and file generation integrity across `@goodandready/dsh-moa`:
|
|
5
|
-
1. **Refinement Context & Heuristic**: Fix `isRefinementTask` parameter handling in `moa-runner.js` and format collected files into Markdown code fences via `formatProjectContext(files)`, preventing `[object Object]` prompt injection.
|
|
6
|
-
2. **Round 2 Workspace Sync**: Save refined files to `.moa/candidate-N/` in Consilium Round 2 so promoted winner files contain peer-critiqued code rather than stale Round 1 drafts.
|
|
7
|
-
3. **End-to-End AbortSignal Propagation**: Propagate `signal` from `streamMoATurn` through `runMoAPipeline`, `runReferencesParallel`, Round 2 calls, and judge synthesis, cancelling in-flight requests and preventing token waste.
|
|
8
|
-
4. **Context Window Protection**: Apply `stripOrSummarizeCode` in Round 2 peer review and judge synthesis prompts when candidate outputs exceed threshold.
|
|
9
|
-
5. **Architectural Standard**: Maintain file size of `lib/moa-runner.js` strictly under 800 lines.
|
|
10
|
-
|
|
11
|
-
## 2. Modules Impacted
|
|
12
|
-
- `lib/file-workspace.js`: Add `formatProjectContext`, enhance `isRefinementTask`.
|
|
13
|
-
- `lib/moa-prompts.js`: Context protection in `buildPeerCritiquePrompt` & `buildSynthesisPrompt`.
|
|
14
|
-
- `lib/moa-runner.js`: `signal` propagation, Round 2 workspace persistence, refinement context formatting.
|
|
15
|
-
- `test/`: Add regression tests for all fixes.
|