Plan de supervisión de PTY y procesos
Plan de supervisión de PTY y procesos
Sección titulada «Plan de supervisión de PTY y procesos»1. Problema y objetivo
Sección titulada «1. Problema y objetivo»Necesitamos un ciclo de vida confiable para la ejecución de comandos de larga duración a través de:
execejecuciones en primer planoexecejecuciones en segundo planoprocessacciones de seguimiento (poll,log,send-keys,paste,submit,kill,remove)- Subprocesos del ejecutor del agente CLI
El objetivo no es solo soportar PTY. El objetivo es una propiedad predecible, cancelación, tiempo de espera y limpieza sin heurísticas de coincidencia de procesos inseguras.
2. Alcance y límites
Sección titulada «2. Alcance y límites»- Mantener la implementación interna en
src/process/supervisor. - No crear un paquete nuevo para esto.
- Mantener la compatibilidad del comportamiento actual cuando sea práctico.
- No ampliar el alcance a la repetición de terminal o a la persistencia de sesiones estilo tmux.
3. Implementado en esta rama
Sección titulada «3. Implementado en esta rama»Línea base del supervisor ya presente
Sección titulada «Línea base del supervisor ya presente»- El módulo supervisor está en su lugar bajo
src/process/supervisor/*. - El tiempo de ejecución de exec y el ejecutor CLI ya están enrutados a través del spawn y wait del supervisor.
- La finalización del registro es idempotente.
Este paso completado
Sección titulada «Este paso completado»- Contrato explícito de comandos PTY
SpawnInputahora es una unión discriminada ensrc/process/supervisor/types.ts.- Las ejecuciones PTY requieren
ptyCommanden lugar de reutilizar el genéricoargv. - El supervisor ya no reconstruye cadenas de comandos PTY a partir de uniones de argv en
src/process/supervisor/supervisor.ts. - El tiempo de ejecución de exec ahora pasa
ptyCommanddirectamente ensrc/agents/bash-tools.exec-runtime.ts.
- Desacoplamiento de tipos de capa de procesos
- Los tipos de Supervisor ya no importan
SessionStdinde los agentes. - El contrato stdin local del proceso reside en
src/process/supervisor/types.ts(ManagedRunStdin). - Los adaptadores ahora dependen solo de los tipos a nivel de proceso:
src/process/supervisor/adapters/child.tssrc/process/supervisor/adapters/pty.ts
- Mejora de la propiedad del ciclo de vida de la herramienta de proceso
src/agents/bash-tools.process.tsahora solicita la cancelación a través del supervisor primero.process kill/removeahora usa la terminación de reserva del árbol de procesos cuando falla la búsqueda del supervisor.removemantiene un comportamiento de eliminación determinista al eliminar las entradas de sesión en ejecución inmediatamente después de que se solicita la terminación.
- Valores predeterminados de watchdog de una sola fuente
- Se agregaron valores predeterminados compartidos en
src/agents/cli-watchdog-defaults.ts. src/agents/cli-backends.tsconsume los valores predeterminados compartidos.src/agents/cli-runner/reliability.tsconsume los mismos valores predeterminados compartidos.
- Limpieza de auxiliares muertos
- Se eliminó la ruta auxiliar
killSessionno utilizada desrc/agents/bash-tools.shared.ts.
- Pruebas de ruta directa del supervisor agregadas
- Se agregó
src/agents/bash-tools.process.supervisor.test.tspara cubrir el enrutamiento de eliminación y eliminación a través de la cancelación del supervisor.
- Correcciones de brechas de confiabilidad completadas
src/agents/bash-tools.process.tsahora recurre a la terminación de procesos a nivel de sistema operativo real cuando falla la búsqueda del supervisor.src/process/supervisor/adapters/child.tsahora utiliza la semántica de terminación del árbol de procesos para las rutas de eliminación predeterminadas de cancelación/tiempo de espera.- Se agregó una utilidad compartida de árbol de procesos en
src/process/kill-tree.ts.
- Cobertura de casos límite del contrato PTY agregada
- Se agregó
src/process/supervisor/supervisor.pty-command.test.tspara el reenvío de comandos PTY verbatim y el rechazo de comandos vacíos. - Se agregó
src/process/supervisor/adapters/child.test.tspara el comportamiento de eliminación del árbol de procesos en la cancelación del adaptador secundario.
4. Brechas y decisiones restantes
Sección titulada «4. Brechas y decisiones restantes»Estado de confiabilidad
Sección titulada «Estado de confiabilidad»Las dos brechas de confiabilidad requeridas para este paso ahora están cerradas:
process kill/removeahora tiene una reserva de terminación del sistema operativo real cuando falla la búsqueda del supervisor.- la cancelación/tiempo de espera del hijo ahora utiliza la semántica de eliminación del árbol de procesos para la ruta de eliminación predeterminada.
- Se agregaron pruebas de regresión para ambos comportamientos.
Durabilidad y conciliación de inicio
Sección titulada «Durabilidad y conciliación de inicio»El comportamiento de reinicio ahora se define explícitamente como solo ciclo de vida en memoria.
reconcileOrphans()sigue siendo una operación nula ensrc/process/supervisor/supervisor.tspor diseño.- Las ejecuciones activas no se recuperan después del reinicio del proceso.
- Este límite es intencional para esta fase de implementación para evitar riesgos de persistencia parcial.
Seguimientos de mantenimiento
Sección titulada «Seguimientos de mantenimiento»runExecProcessensrc/agents/bash-tools.exec-runtime.tstodavía maneja múltiples responsabilidades y puede dividirse en ayudantes enfocados en un seguimiento.
5. Plan de implementación
Sección titulada «5. Plan de implementación»La fase de implementación para los elementos de confiabilidad y contrato requeridos está completa.
Completado:
- terminación real de reserva
process kill/remove - cancelación del árbol de procesos para la ruta de terminación predeterminada del adaptador secundario
- pruebas de regresión para la terminación de reserva y la ruta de terminación del adaptador secundario
- pruebas de casos extremos de comando PTY bajo
ptyCommandexplícito - límite de reinicio en memoria explícito con
reconcileOrphans()operación nula por diseño
Seguimiento opcional:
- dividir
runExecProcessen ayudantes enfocados sin cambios de comportamiento
6. Mapa de archivos
Sección titulada «6. Mapa de archivos»Supervisor de procesos
Sección titulada «Supervisor de procesos»src/process/supervisor/types.tsactualizado con entrada de generación discriminada y contrato stdin local del proceso.src/process/supervisor/supervisor.tsactualizado para usarptyCommandexplícito.src/process/supervisor/adapters/child.tsysrc/process/supervisor/adapters/pty.tsdesacoplados de los tipos de agente.- finalización idempotente
src/process/supervisor/registry.tssin cambios y conservada.
Integración de ejecución y procesos
Sección titulada «Integración de ejecución y procesos»src/agents/bash-tools.exec-runtime.tsactualizado para pasar el comando PTY explícitamente y mantener la ruta de reserva.src/agents/bash-tools.process.tsactualizado para cancelar a través del supervisor con terminación de reserva del árbol de procesos real.src/agents/bash-tools.shared.tseliminó la ruta del ayudante de terminación directa.
Confiabilidad de la CLI
Sección titulada «Confiabilidad de la CLI»src/agents/cli-watchdog-defaults.tsagregado como línea base compartida.src/agents/cli-backends.tsysrc/agents/cli-runner/reliability.tsahora consumen los mismos valores predeterminados.
7. Validación ejecutada en esta fase
Sección titulada «7. Validación ejecutada en esta fase»Pruebas unitarias:
pnpm vitest src/process/supervisor/registry.test.tspnpm vitest src/process/supervisor/supervisor.test.tspnpm vitest src/process/supervisor/supervisor.pty-command.test.tspnpm vitest src/process/supervisor/adapters/child.test.tspnpm vitest src/agents/cli-backends.test.tspnpm vitest src/agents/bash-tools.exec.pty-cleanup.test.tspnpm vitest src/agents/bash-tools.process.poll-timeout.test.tspnpm vitest src/agents/bash-tools.process.supervisor.test.tspnpm vitest src/process/exec.test.ts
Objetivos E2E:
pnpm vitest src/agents/cli-runner.test.tspnpm vitest run src/agents/bash-tools.exec.pty-fallback.test.ts src/agents/bash-tools.exec.background-abort.test.ts src/agents/bash-tools.process.send-keys.test.ts
Nota sobre Typecheck:
- Use
pnpm build(ypnpm checkpara la puerta completa de lint/docs) en este repositorio. Las notas antiguas que mencionanpnpm tsgoestán obsoletas.
8. Garantías operativas conservadas
Sección titulada «8. Garantías operativas conservadas»- El comportamiento de endurecimiento del entorno de ejecución no ha cambiado.
- El flujo de aprobación y lista de permitidos no ha cambiado.
- La sanitización de salida y los límites de salida no han cambiado.
- El adaptador PTY todavía garantiza el establecimiento de espera en la terminación forzada y la eliminación del escucha.
9. Definición de terminado
Sección titulada «9. Definición de terminado»- El supervisor es el propietario del ciclo de vida para las ejecuciones gestionadas.
- El inicio de PTY utiliza un contrato de comando explícito sin reconstrucción de argv.
- La capa de proceso no tiene dependencia de tipo en la capa de agente para los contratos stdin del supervisor.
- Los valores predeterminados del perro guardián son de fuente única.
- Las pruebas unitarias y e2e específicas siguen pasando (en verde).
- El límite de durabilidad del reinicio está explícitamente documentado o completamente implementado.
10. Resumen
Sección titulada «10. Resumen»La rama ahora tiene una forma de supervisión coherente y más segura:
- contrato PTY explícito
- capas de proceso más limpias
- ruta de cancelación impulsada por el supervisor para las operaciones de proceso
- terminación alternativa real cuando falla la búsqueda del supervisor
- cancelación del árbol de procesos para las rutas de terminación predeterminadas de ejecución secundaria
- valores predeterminados unificados del perro guardián
- límite de reinicio explícito en memoria (sin conciliación de huérfanos a través del reinicio en este paso)