This repository was archived by the owner on Jun 23, 2026. It is now read-only.
v1.2.0 — Parallel-safe dispatch & parallel orchestrator
Makes the async job engine safe to run many agy jobs in parallel, and ships an updated orchestrator agent that uses that parallelism. / Делает асинхронный движок безопасным для параллельного запуска многих agy-джоб и обновляет агент-оркестратор под этот параллелизм.
English
MCP server — concurrency fixes (src/utils/jobs.ts)
- Per-job crash detection. The crash monitor now scans each job's own
output.txt(new purescanFatalMarker()) instead of the shared newest~/.gemini/.../cli-*.log. Previously, when several jobs ran at once, one crashed job could trigger the kill of a healthy sibling (the monitor fired on whichever job the loop was iterating). Detection is now fully isolated per job. - Per-job conversation identity. Removed the global
sessionState.activeConversationIdwrite on job success (it was derived from the newest.pbby mtime, so near-simultaneous completions could attribute one job's conversation to another and leak context). The per-jobmeta.conversationIdis now the single source of truth. - Internal:
catch (e: any)→unknownwith narrowing; addedsrc/jobs.test.ts. 90 tests passing.
Bundled orchestrator agent
agents/dev-orchestrator-agy.md— Phase 4 rewritten from sequential to parallel fan-out / fan-in over the async MCP (async_start→async_status→async_result).- Guardrails:
MAX_PARALLEL=3, disjointfiles_to_touchper batch,risk_class: highruns solo, the orchestrator serializes all commits (workers never commit — avoids.git/index.lockraces), plus a live progress board. skills/orchestrator-workflow/SKILL.md— notes that the agy agent owns its parallel loop.
Verified: deterministic process-level smoke (a crashed job no longer kills siblings) and a live 3-job parallel run (concurrent, isolated conversations, no false kills).
Русский
MCP-сервер — фиксы конкурентности (src/utils/jobs.ts)
- Детекция падений — по каждой джобе отдельно. Кран-монитор теперь сканирует собственный
output.txtкаждой джобы (новая чистая функцияscanFatalMarker()), а не общий свежий~/.gemini/.../cli-*.log. Раньше при параллельной работе одна упавшая джоба могла спровоцировать убийство здоровой соседней (монитор срабатывал на той джобе, по которой шёл цикл). Теперь детекция полностью изолирована. - Идентичность беседы — по каждой джобе. Убрана глобальная запись
sessionState.activeConversationIdпри успехе джобы (бралась как самый свежий.pbпо mtime — при почти одновременном завершении могла приписать одной джобе беседу другой и утечь контекст). Источник истины —meta.conversationIdна джобу. - Внутреннее:
catch (e: any)→unknownс нарроингом; добавленsrc/jobs.test.ts. 90 тестов проходят.
Встроенный агент-оркестратор
agents/dev-orchestrator-agy.md— Phase 4 переписана с последовательной на параллельную fan-out / fan-in поверх async MCP (async_start→async_status→async_result).- Guardrails:
MAX_PARALLEL=3, непересекающиесяfiles_to_touchв батче,risk_class: highидёт solo, оркестратор сериализует все коммиты (воркеры не коммитят — нет гонки за.git/index.lock), плюс живая доска прогресса. skills/orchestrator-workflow/SKILL.md— помечено, что agy-агент владеет своим параллельным циклом.
Проверено: детерминированный process-level smoke (упавшая джоба больше не убивает соседей) и живой прогон 3 джоб параллельно (одновременность, изоляция бесед, без ложных убийств).