Ajout de capacités (guide du contributeur)
Utilisez ceci lorsque OpenClaw a besoin d’un nouveau domaine partagé tel que la génération d’images, la génération de vidéos, ou une future zone de fonctionnalités prise en charge par un fournisseur.
La règle :
- plugin = limite de propriété
- capacité = contrat central partagé
Ne commencez pas par connecter directement un fournisseur à un canal ou à un outil. Commencez par définir la capacité.
Quand créer une capacité
Section intitulée « Quand créer une capacité »Créez une nouvelle capacité lorsque tous les éléments suivants sont vrais :
- Plus d’un fournisseur pourrait raisonnablement l’implémenter.
- Les canaux, les outils ou les plugins de fonctionnalités devraient la consommer sans se soucier du fournisseur.
- Le cœur doit posséder le comportement de repli, la stratégie, la configuration ou la livraison.
Si le travail est spécifique à un fournisseur et qu’aucun contrat partagé n’existe encore, arrêtez-vous et définissez d’abord le contrat.
La séquence standard
Section intitulée « La séquence standard »- Définissez le contrat central typé.
- Ajoutez l’enregistrement du plugin pour ce contrat.
- Ajoutez un assistant d’exécution partagé.
- Connectez un vrai plugin fournisseur comme preuve.
- Déplacez les consommateurs de fonctionnalités/canaux vers l’assistant d’exécution.
- Ajoutez des tests de contrat.
- Documentez la configuration orientée opérateur et le modèle de propriété.
Quoi mettre où
Section intitulée « Quoi mettre où »Cœur :
- Types de requête/réponse.
- Registre de fournisseurs + résolution.
- Comportement de repli.
- Schéma de configuration avec métadonnées de documentation
title/descriptionpropagées sur les objets imbriqués, les caractères génériques, les éléments de tableau et les nœuds de composition. - Surface de l’assistant d’exécution.
Plugin fournisseur :
- Appels à l’API du fournisseur.
- Gestion de l’authentification du fournisseur.
- Normalisation des requêtes spécifiques au fournisseur.
- Enregistrement de l’implémentation de la capacité.
Plugin de fonctionnalité/canal :
- Appelle
api.runtime.*ou la fonction auxiliaireplugin-sdk/*-runtimecorrespondante. - N’appelle jamais directement une implémentation fournisseur.
Interfaces du fournisseur et du harnais
Section intitulée « Interfaces du fournisseur et du harnais »Utilisez les hooks fournisseur lorsque le comportement relève du contrat du provider de modèle plutôt que de la boucle générique de l’agent. Les exemples incluent les paramètres de requête spécifiques au fournisseur après la sélection du transport, la préférence de profil d’authentification, les superpositions de prompt (prompt overlays) et le routage de repli de suivi après le basculement de modèle/profil.
Utilisez les hooks de harnais d’agent lorsque le comportement relève de l’exécution d’un tour (runtime). Les harnais peuvent classer les résultats de tentative réussis mais inutilisables, tels que les réponses vides, uniquement raisonnées ou uniquement planifiées, afin que la politique de repli de modèle externe puisse prendre la décision de nouvelle tentative.
Gardez les deux interfaces étroites :
- Le cœur (Core) possède la politique de retry/fallback.
- Les plugins fournisseur possèdent les indices de requête/auth/routage spécifiques au fournisseur.
- Les plugins de harnais possèdent la classification des tentatives spécifique à l’exécution.
- Les plugins tiers retournent des indices, et non des mutations directes de l’état du cœur.
Liste de contrôle des fichiers
Section intitulée « Liste de contrôle des fichiers »Pour une nouvelle capacité, attendez-vous à toucher ces zones :
src/<capability>/types.tssrc/<capability>/...registry/runtime.tssrc/plugins/types.tssrc/plugins/registry.tssrc/plugins/captured-registration.tssrc/plugins/contracts/registry.tssrc/plugins/runtime/types-core.tssrc/plugins/runtime/index.tssrc/plugin-sdk/<capability>.tssrc/plugin-sdk/<capability>-runtime.ts- Un ou plusieurs packages de plugins groupés.
- Config, docs, tests.
Exemple pratique : génération d’images
Section intitulée « Exemple pratique : génération d’images »La génération d’images suit la forme standard :
- Le cœur définit
ImageGenerationProvider. - Le cœur expose
registerImageGenerationProvider(...). - Le cœur expose
runtime.imageGeneration.generate(...). - Les plugins
openai,google,faletminimaxenregistrent des implémentations soutenues par un fournisseur. - Les futurs fournisseurs enregistrent le même contrat sans modifier les canaux/outils.
La clé de configuration est intentionnellement séparée du routage d’analyse visuelle :
agents.defaults.imageModelanalyse les images.agents.defaults.imageGenerationModelgénère des images.
Gardez-les séparés afin que le repli et la politique restent explicites.
Liste de contrôle de révision
Section intitulée « Liste de contrôle de révision »Avant d’expédier une nouvelle capacité, vérifiez :
- Aucun canal/outil n’importe directement de code fournisseur.
- Le helper d’exécution est le chemin partagé.
- Au moins un test de contrat affirme la possession regroupée.
- La documentation de configuration nomme la nouvelle clé de modèle/configuration.
- La documentation du plugin explique la limite de propriété.
Si une PR saute la couche de capacité et encode en dur le comportement du fournisseur dans un canal/outil, renvoyez-la et définissez d’abord le contrat.
Connexes
Section intitulée « Connexes »- Plugin internals — modèle de capacité, propriété, pipeline de chargement, helpers d’exécution.
- Building plugins — tutoriel du premier plugin.
- SDK overview — carte d’importation et référence de l’API d’enregistrement.
- Creating skills — surface contributeur compagnon.