Plan de Supervision de Processus PTY
1. Problème et objectif
Nous avons besoin d'un cycle de vie fiable pour l'exécution de commandes longue durée à travers :
- les exécutions
execau premier plan - les exécutions
execen arrière-plan - les actions de suivi
process(poll,log,send-keys,paste,submit,kill,remove) - les sous-processus de l'exécuteur d'agent CLI
L'objectif n'est pas seulement de supporter PTY. L'objectif est d'avoir une propriété, une annulation, un délai d'attente et un nettoyage prévisibles sans heuristiques de correspondance de processus non sécurisées.
2. Périmètre et limites
- Garder l'implémentation interne dans
src/process/supervisor. - Ne pas créer de nouveau package pour cela.
- Maintenir la compatibilité avec le comportement actuel lorsque c'est pratique.
- Ne pas élargir le périmètre à la relecture de terminal ou à la persistance de session de type tmux.
3. Implémenté dans cette branche
Base du superviseur déjà présente
- Le module superviseur est en place sous
src/process/supervisor/*. - L'exécution Exec et l'exécuteur CLI sont déjà acheminés via le lancement et l'attente du superviseur.
- La finalisation du registre est idempotente.
Cette étape terminée
- Contrat de commande PTY explicite
SpawnInputest maintenant une union discriminée danssrc/process/supervisor/types.ts.- Les exécutions PTY nécessitent
ptyCommandau lieu de réutiliser leargvgénérique. - Le superviseur ne reconstruit plus les chaînes de commande PTY à partir de jointures d'argv dans
src/process/supervisor/supervisor.ts. - L'exécution Exec passe maintenant
ptyCommanddirectement danssrc/agents/bash-tools.exec-runtime.ts.
- Découplage des types de la couche processus
- Les types du superviseur n'importent plus
SessionStdindes agents. - Le contrat stdin local au processus réside dans
src/process/supervisor/types.ts(ManagedRunStdin). - Les adaptateurs dépendent maintenant uniquement des types de la couche processus :
src/process/supervisor/adapters/child.tssrc/process/supervisor/adapters/pty.ts
- Amélioration de la propriété du cycle de vie des outils processus
src/agents/bash-tools.process.tsdemande maintenant l'annulation via le superviseur en premier.process kill/removeutilise maintenant la terminaison de secours par arborescence de processus lorsque la recherche dans le superviseur échoue.removeconserve un comportement de suppression déterministe en supprimant immédiatement les entrées de session en cours d'exécution après que la terminaison a été demandée.
- Source unique des valeurs par défaut du watchdog
- Ajout de valeurs par défaut partagées dans
src/agents/cli-watchdog-defaults.ts. src/agents/cli-backends.tsconsomme les valeurs par défaut partagées.src/agents/cli-runner/reliability.tsconsomme les mêmes valeurs par défaut partagées.
- Nettoyage des aides inutilisées
- Suppression du chemin d'aide
killSessioninutilisé desrc/agents/bash-tools.shared.ts.
- Tests du chemin direct du superviseur ajoutés
- Ajout de
src/agents/bash-tools.process.supervisor.test.tspour couvrir le routage de kill et remove via l'annulation du superviseur.
- Corrections des lacunes de fiabilité terminées
src/agents/bash-tools.process.tsutilise maintenant une terminaison réelle au niveau du système d'exploitation en secours lorsque la recherche dans le superviseur échoue.src/process/supervisor/adapters/child.tsutilise maintenant la sémantique de terminaison par arborescence de processus pour les chemins de kill par défaut d'annulation/délai d'attente.- Ajout d'un utilitaire d'arborescence de processus partagé dans
src/process/kill-tree.ts.
- Couverture des cas limites du contrat PTY ajoutée
- Ajout de
src/process/supervisor/supervisor.pty-command.test.tspour le transfert littéral de commande PTY et le rejet des commandes vides. - Ajout de
src/process/supervisor/adapters/child.test.tspour le comportement de kill par arborescence de processus dans l'annulation de l'adaptateur enfant.
4. Lacunes et décisions restantes
État de la fiabilité
Les deux lacunes de fiabilité requises pour cette étape sont maintenant comblées :
process kill/removedispose maintenant d'une terminaison réelle au niveau du système d'exploitation en secours lorsque la recherche dans le superviseur échoue.- l'annulation/délai d'attente enfant utilise maintenant la sémantique de kill par arborescence de processus pour le chemin de kill par défaut.
- Des tests de régression ont été ajoutés pour les deux comportements.
Durabilité et réconciliation au démarrage
Le comportement au redémarrage est maintenant explicitement défini comme un cycle de vie uniquement en mémoire.
reconcileOrphans()reste une opération sans effet danssrc/process/supervisor/supervisor.tspar conception.- Les exécutions actives ne sont pas récupérées après un redémarrage du processus.
- Cette limite est intentionnelle pour cette étape d'implémentation afin d'éviter les risques de persistance partielle.
Suivis de maintenabilité
runExecProcessdanssrc/agents/bash-tools.exec-runtime.tsgère encore plusieurs responsabilités et peut être divisé en aides ciblées lors d'un suivi.
5. Plan d'implémentation
L'étape d'implémentation pour les éléments de fiabilité et de contrat requis est terminée. Terminé :
- la terminaison réelle de secours pour
process kill/remove - l'annulation par arborescence de processus pour le chemin de kill par défaut de l'adaptateur enfant
- les tests de régression pour le kill de secours et le chemin de kill de l'adaptateur enfant
- les tests des cas limites de commande PTY sous
ptyCommandexplicite - la limite explicite de redémarrage en mémoire avec
reconcileOrphans()sans effet par conception
Suivi optionnel :
- diviser
runExecProcessen aides ciblées sans dérive de comportement
6. Carte des fichiers
Superviseur de processus
src/process/supervisor/types.tsmis à jour avec l'entrée de lancement discriminée et le contrat stdin local au processus.src/process/supervisor/supervisor.tsmis à jour pour utiliserptyCommandexplicitement.src/process/supervisor/adapters/child.tsetsrc/process/supervisor/adapters/pty.tsdécouplés des types d'agents.src/process/supervisor/registry.tsfinalisation idempotente inchangée et conservée.
Intégration Exec et processus
src/agents/bash-tools.exec-runtime.tsmis à jour pour passer la commande PTY explicitement et conserver le chemin de secours.src/agents/bash-tools.process.tsmis à jour pour annuler via le superviseur avec une terminaison de secours réelle par arborescence de processus.src/agents/bash-tools.shared.tschemin d'aide de kill direct supprimé.
Fiabilité CLI
src/agents/cli-watchdog-defaults.tsajouté comme base partagée.src/agents/cli-backends.tsetsrc/agents/cli-runner/reliability.tsconsomment maintenant les mêmes valeurs par défaut.
7. Exécution de validation dans cette étape
Tests unitaires :
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
Cibles 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
Note de vérification de type :
- Utiliser
pnpm build(etpnpm checkpour la porte complète de lint/docs) dans ce dépôt. Les notes plus anciennes mentionnantpnpm tsgosont obsolètes.
8. Garanties opérationnelles préservées
- Le comportement de durcissement de l'environnement Exec est inchangé.
- Le flux d'approbation et de liste autorisée est inchangé.
- L'assainissement des sorties et les plafonds de sortie sont inchangés.
- L'adaptateur PTY garantit toujours le règlement de l'attente sur un kill forcé et la suppression des écouteurs.
9. Définition de terminé
- Le superviseur est le propriétaire du cycle de vie pour les exécutions gérées.
- Le lancement PTY utilise un contrat de commande explicite sans reconstruction d'argv.
- La couche processus n'a pas de dépendance de type sur la couche agent pour les contrats stdin du superviseur.
- Les valeurs par défaut du watchdog proviennent d'une source unique.
- Les tests unitaires et e2e ciblés restent verts.
- La limite de durabilité au redémarrage est explicitement documentée ou entièrement implémentée.
10. Résumé
La branche a maintenant une forme de supervision cohérente et plus sûre :
- contrat PTY explicite
- couche processus plus propre
- chemin d'annulation piloté par le superviseur pour les opérations sur les processus
- terminaison réelle de secours lorsque la recherche dans le superviseur échoue
- annulation par arborescence de processus pour les chemins de kill par défaut des exécutions enfant
- valeurs par défaut du watchdog unifiées
- limite explicite de redémarrage en mémoire (pas de réconciliation d'orphelins au redémarrage dans cette étape)
Plan de Passerelle OpenResponsesPlan de Liaison de Session Indépendant du Canal