Эксперименты
План супервизии PTY и процессов
1. Проблема и цель
Нам нужен один надежный жизненный цикл для долгосрочного выполнения команд в следующих сценариях:
execзапуски в foregroundexecзапуски в background- Последующие действия
process(poll,log,send-keys,paste,submit,kill,remove) - Подпроцессы CLI agent runner
Цель — не просто поддержка PTY. Цель — предсказуемое владение, отмена, таймаут и очистка без небезопасных эвристик сопоставления процессов.
2. Область действия и границы
- Оставить реализацию внутренней в
src/process/supervisor. - Не создавать новый пакет для этого.
- Сохранить совместимость с текущим поведением, где это практично.
- Не расширять область действия до воспроизведения терминала или сохранения сессий в стиле tmux.
3. Реализовано в этой ветке
Базовый уровень супервизора уже присутствует
- Модуль супервизора находится в
src/process/supervisor/*. - Exec runtime и CLI runner уже направляются через spawn и wait супервизора.
- Финализация реестра идемпотентна.
В этом этапе завершено
- Явный контракт PTY-команды
SpawnInputтеперь является размеченным объединением вsrc/process/supervisor/types.ts.- Для PTY-запусков требуется
ptyCommandвместо повторного использования общегоargv. - Супервизор больше не пересобирает строки PTY-команд из объединения argv в
src/process/supervisor/supervisor.ts. - Exec runtime теперь передает
ptyCommandнапрямую вsrc/agents/bash-tools.exec-runtime.ts.
- Разделение типов на уровне процесса
- Типы супервизора больше не импортируют
SessionStdinиз агентов. - Контракт локального stdin процесса находится в
src/process/supervisor/types.ts(ManagedRunStdin). - Адаптеры теперь зависят только от типов уровня процесса:
src/process/supervisor/adapters/child.tssrc/process/supervisor/adapters/pty.ts
- Улучшение владения жизненным циклом инструментов процесса
src/agents/bash-tools.process.tsтеперь запрашивает отмену сначала через супервизор.process kill/removeтеперь используют завершение через дерево процессов в качестве запасного варианта, если поиск в супервизоре не дал результатов.removeсохраняет детерминированное поведение удаления, немедленно удаляя записи о запущенных сессиях после запроса на завершение.
- Единый источник значений по умолчанию для watchdog
- Добавлены общие значения по умолчанию в
src/agents/cli-watchdog-defaults.ts. src/agents/cli-backends.tsиспользует общие значения по умолчанию.src/agents/cli-runner/reliability.tsиспользует те же общие значения по умолчанию.
- Очистка неиспользуемых вспомогательных функций
- Удален неиспользуемый путь вспомогательной функции
killSessionизsrc/agents/bash-tools.shared.ts.
- Добавлены тесты прямого пути супервизора
- Добавлен
src/agents/bash-tools.process.supervisor.test.tsдля покрытия маршрутизации kill и remove через отмену в супервизоре.
- Устранены пробелы в надежности
src/agents/bash-tools.process.tsтеперь использует реальное завершение процесса на уровне ОС в качестве запасного варианта, если поиск в супервизоре не дал результатов.src/process/supervisor/adapters/child.tsтеперь использует семантику завершения дерева процессов для путей отмены/таймаута по умолчанию.- Добавлена общая утилита для работы с деревом процессов в
src/process/kill-tree.ts.
- Добавлено покрытие крайних случаев контракта PTY
- Добавлен
src/process/supervisor/supervisor.pty-command.test.tsдля проверки дословной передачи PTY-команды и отклонения пустых команд. - Добавлен
src/process/supervisor/adapters/child.test.tsдля проверки поведения завершения дерева процессов при отмене в адаптере child.
4. Оставшиеся пробелы и решения
Статус надежности
Два необходимых пробела в надежности для этого этапа теперь устранены:
process kill/removeтеперь имеет запасной вариант реального завершения на уровне ОС, если поиск в супервизоре не дал результатов.- Отмена/таймаут для child теперь использует семантику завершения дерева процессов для пути kill по умолчанию.
- Для обоих поведений добавлены регрессионные тесты.