AnalyseDeCircuit/oxideterm

Appliquer les règles de possession du runtime OxideTerm lors de l'implémentation ou de la révision des nœuds SSH, volets de terminal, SFTP, redirection de ports, reconnexion, hôtes de rebond, bilans de santé, NodeRouter ou tâches backend de longue durée.

Qu'est-ce que oxideterm ?

Cette compétence (skill) définit les règles invariables de possession et de cycle de vie pour les sessions de nœuds distants dans OxideTerm. Elle garantit qu'un nœud SSH connecté reste indépendant de tout volet de terminal qui le consomme, empêchant ainsi que la durée de vie de l'interface utilisateur devienne silencieusement la durée de vie du backend. La compétence spécifie que la vivacité du nœud appartient au registre de connexions, à `NodeRouter` ou à une opération explicite de déconnexion. La fermeture d'un volet de terminal ne doit que supprimer ce consommateur terminal, sans déconnecter un nœud partagé. Des règles strictes sont imposées pour SFTP (session native obligatoire), la redirection de ports (tâches d'écoute et de pont avec propriétaire explicite), la reconnexion et les contrôles de santé (propriétaire et chemin d'annulation liés à la durée de vie du nœud, de l'espace de travail ou de l'application). Les contournements interdits incluent l'ouverture d'un deuxième transport SSH non géré, la sélection de connexion via le premier volet de terminal, ou le stockage de tâches longues uniquement dans des dialogues temporaires. Les pratiques recommandées incluent l'expression des dépendances backend comme consommateurs ou propriétaires dans le registre, et l'utilisation de mises à jour de l'interface utilisateur pilotées par les événements plutôt que par l'interrogation de l'état du terminal.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/AnalyseDeCircuit/oxideterm/tree/HEAD/.agents/skills/oxideterm-node-session-ownership

Installed? Explore more Productivité et collaboration skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Possession des sessions de nœuds OxideTerm

Utilisez cette compétence à chaque fois qu'un changement peut altérer quel composant crée, partage, ferme, reconnecte ou observe une session distante ou une tâche d'arrière-plan.

Invariant fondamental

Un nœud SSH connecté est indépendant de tout volet de terminal qui le consomme. La durée de vie de l'interface utilisateur ne doit pas devenir silencieusement la durée de vie du backend.

flowchart TD
    W["Durée de vie de l'espace de travail ou de l'application"] --> R["NodeRouter et registre de connexions"]
    R --> N["Connexion de nœud SSH physique"]
    N --> T["Consommateur terminal"]
    N --> S["Consommateur SFTP"]
    N --> F["Consommateur de redirection"]
    R --> H["Tâches de santé et de reconnexion"]

Règles obligatoires

  • La vivacité du nœud appartient au registre de connexions, à NodeRouter, ou à une opération explicite de déconnexion de nœud.
  • Fermer un volet de terminal supprime ce consommateur terminal. Il ne doit pas déconnecter un nœud partagé.
  • SFTP doit acquérir une session SFTP réelle adossée à un nœud. Une commande shell qui imite le transfert de fichier n'est qu'un repli de compatibilité documenté.
  • La redirection de ports possède ses propres tâches d'écoute et de pont. Ces tâches doivent rester actives sans volet de terminal ouvert et doivent s'arrêter lorsque la règle de redirection ou le nœud propriétaire s'arrête.
  • La reconnexion, les bilans de santé, les délais de grâce et les ponts de processus enfant nécessitent un propriétaire explicite et un chemin d'annulation lié à la durée de vie du nœud, de l'espace de travail ou de l'application.
  • Les tâches de longue durée ne doivent pas s'exécuter sur un runtime à usage unique qui est abandonné lorsqu'un gestionnaire de commande retourne.
  • Un nœud enfant connecté via un hôte de rebond doit conserver la connexion parente aussi longtemps que le transport enfant en a besoin.
  • Les composants de l'interface utilisateur observent l'état du runtime via des événements de routeur ou de registre. Ils ne doivent pas déduire la vivacité du nœud de l'existence d'un terminal.
  • Ajoutez des commentaires concis en anglais aux transferts de possession : création, partage, invalidation, réacquisition, annulation et survie délibérée après destruction de l'interface utilisateur.

Contournements interdits

  • N'ouvrez pas un deuxième transport SSH non géré parce qu'une API adossée à un nœud est peu pratique.
  • Ne trouvez pas une connexion en sélectionnant le premier volet de terminal associé à un hôte.
  • Ne stockez pas une tâche de longue durée uniquement dans une boîte de dialogue temporaire, un gestionnaire de commande ou une vue de terminal.
  • Ne marquez pas un nœud comme déconnecté simplement parce qu'un canal, volet, requête SFTP ou consommateur de redirection se ferme.
  • Ne laissez pas des processus enfants ou des tâches Tokio générés et détachés sans signal d'arrêt et chemin d'achèvement borné.

Pratiques recommandées

  • Exprimez chaque dépendance backend comme un consommateur ou un propriétaire dans le registre plutôt que de compter sur une rétention Arc incidente.
  • Conservez l'état du transport physique sur l'entrée de connexion et la topologie logique dans NodeRouter.
  • Faites en sorte que les cascades de déconnexion suivent les identités de connexion parent-enfant enregistrées, et non des chaînes d'hôte correspondantes.
  • Conservez les poignées de tâche ou les expéditeurs d'annulation sur l'objet dont la durée de vie définit la tâche.
  • Préférez les mises à jour de l'interface utilisateur pilotées par les événements plutôt que l'interrogation de l'état du terminal.

Chemins de compatibilité

Les replis de compatibilité ne sont autorisés que lorsqu'ils sont explicites, bornés et rapportés avec précision. Ils ne doivent pas être décrits comme une implémentation native SFTP, de redirection ou de session de nœud. Enregistrez le propriétaire et le chemin de nettoyage même pour les replis temporaires.

Exemples

Incorrect :

// La fermeture du volet détruit accidentellement le seul propriétaire du nœud partagé.
struct TerminalPane {
    ssh_transport: SshTransport,
}

Forme correcte :

// Le volet ne possède que son enregistrement de consommateur ; le registre possède la vivacité du transport.
struct TerminalPane {
    connection_id: String,
    terminal_consumer: ConnectionConsumer,
}

Incorrect :

tokio::runtime::Runtime::new()?.spawn(run_forward_listener());
// Le runtime est abandonné lorsque la commande retourne.

Forme correcte :

// Le propriétaire de la redirection conserve à la fois les poignées d'annulation et d'achèvement.
struct ForwardingJob {
    shutdown_tx: Option<oneshot::Sender<()>>,
    worker: JoinHandle<()>,
}

Liste de vérification pour la révision

  1. Identifiez le propriétaire de la connexion physique.
  2. Listez chaque consommateur terminal, SFTP, redirection, reconnexion, santé et nœud enfant.
  3. Vérifiez que la fermeture d'un consommateur ne ferme pas des consommateurs non liés.
  4. Vérifiez que la déconnexion explicite d'un nœud arrête les tâches dépendantes et les transports enfants.
  5. Inspectez chaque tâche ou processus généré pour un propriétaire retenu, un signal d'annulation et un chemin de nettoyage.
  6. Vérifiez que l'état de l'interface utilisateur consomme des événements de nœud plutôt que la vivacité dérivée du terminal.
  7. Énoncez précisément tout repli de compatibilité restant.

Vérification

  • Fermez le dernier terminal et prouvez que le nœud reste utilisable par un autre consommateur enregistré.
  • Ouvrez SFTP sans nécessiter de volet de terminal.
  • Démarrez la redirection locale, distante et dynamique et vérifiez que les écouteurs survivent à la fermeture du volet.
  • Déconnectez un nœud parent et vérifiez que les nœuds enfants et tâches dépendants transitionnent de manière cohérente.
  • Reconnectez-vous dans le délai de grâce sans perdre d'état d'interface utilisateur non lié.
  • Confirmez que le nettoyage des tâches/processus se termine après une déconnexion explicite et un arrêt de l'application.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

Skills associés