Ceci est un guide de contribution destiné aux développeurs du cœur d’OpenClaw. Si vous
développez un plugin externe, consultez plutôt Développer des plugins.
Pour la référence architecturale détaillée (modèle de capacités, responsabilités,
pipeline de chargement, utilitaires d’exécution), consultez Architecture interne des plugins.
- plugin = frontière de responsabilité
- capacité = contrat partagé du cœur
Quand créer une capacité
Créez une capacité uniquement lorsque toutes les conditions suivantes sont remplies :- Plusieurs fournisseurs pourraient vraisemblablement l’implémenter.
- Les canaux, outils ou plugins fonctionnels doivent pouvoir l’utiliser sans se soucier du fournisseur.
- Le cœur doit gérer le mécanisme de repli, la politique, la configuration ou le comportement de livraison.
Séquence standard
- Définissez le contrat typé du cœur.
- Ajoutez l’enregistrement du plugin pour ce contrat.
- Ajoutez un utilitaire d’exécution partagé.
- Intégrez un véritable plugin fournisseur à titre de preuve.
- Faites migrer les consommateurs fonctionnels et les canaux vers l’utilitaire d’exécution.
- Ajoutez des tests de contrat.
- Documentez la configuration destinée aux opérateurs et le modèle de responsabilités.
Répartition des responsabilités
Points d’extension des fournisseurs et des environnements d’exécution
Utilisez les hooks de fournisseur lorsque le comportement relève du contrat du fournisseur de modèles plutôt que de la boucle générique de l’agent. Il peut notamment s’agir des paramètres de requête propres au fournisseur après la sélection du transport, de la préférence de profil d’authentification, des surcharges de prompt et du routage de repli après une bascule de modèle ou de profil. Utilisez les hooks d’environnement d’exécution de l’agent lorsque le comportement relève de l’environnement qui exécute un tour. Ces environnements peuvent classer des résultats de protocole explicites, tels qu’une sortie vide, un raisonnement sans sortie visible ou un plan structuré sans réponse finale, afin que la politique externe de repli du modèle puisse décider d’une nouvelle tentative. Maintenez ces deux points d’extension ciblés :- Le cœur gère la politique de nouvelle tentative et de repli.
- Les plugins fournisseurs gèrent les paramètres de requête, l’authentification et les indications de routage propres au fournisseur.
- Les plugins d’environnement d’exécution gèrent la classification des tentatives propre à l’environnement.
- Les plugins tiers renvoient des indications, sans modifier directement l’état du cœur.
Liste de contrôle des fichiers
Pour une nouvelle capacité, prévoyez de modifier les zones suivantes :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 paquets de plugins intégrés.
- La configuration, la documentation et les tests.
Exemple détaillé : génération d’images
La génération d’images suit la structure standard :- Le cœur définit
ImageGenerationProvider. - Le cœur expose
registerImageGenerationProvider(...). - Le cœur expose
api.runtime.imageGeneration.generate(...)et.listProviders(...). - Les plugins fournisseurs (
comfy,deepinfra,fal,google,litellm,microsoft-foundry,minimax,openai,openrouter,vydra,xai) enregistrent des implémentations reposant sur ces fournisseurs. - Les futurs fournisseurs enregistrent le même contrat sans modifier les canaux ni les outils.
agents.defaults.imageModelanalyse les images.agents.defaults.imageGenerationModelgénère des images.
Fournisseurs de plongements
UtilisezregisterEmbeddingProvider(...) et le contrat embeddingProviders pour
les fournisseurs réutilisables de plongements vectoriels. Ce contrat est volontairement plus large
que la mémoire : les outils, la recherche, la récupération, les importateurs ou les futurs plugins fonctionnels
peuvent utiliser des plongements sans dépendre du moteur de mémoire. La recherche en mémoire
utilise également les fournisseurs génériques embeddingProviders.
L’ancienne API d’enregistrement propre à la mémoire et le contrat memoryEmbeddingProviders
sont obsolètes. Utilisez registerEmbeddingProvider et
embeddingProviders pour tous les nouveaux fournisseurs de plongements.
Liste de contrôle de la revue
Avant de publier une nouvelle capacité, vérifiez les points suivants :- Aucun canal ni outil n’importe directement le code d’un fournisseur.
- L’utilitaire d’exécution constitue le chemin partagé.
- Au moins un test de contrat vérifie la responsabilité intégrée.
- La documentation de configuration indique le nouveau modèle ou la nouvelle clé de configuration.
- La documentation des plugins explique la frontière de responsabilité.
Ressources connexes
- Architecture interne des plugins — modèle de capacités, responsabilités, pipeline de chargement et utilitaires d’exécution.
- Développer des plugins — tutoriel de création d’un premier plugin.
- Présentation du SDK — référence des correspondances d’importation et de l’API d’enregistrement.
- Créer des skills — interface complémentaire destinée aux contributeurs.