Ce document a été traduit par IA. Pour des informations précises, veuillez consulter la version anglaise.
Lorsqu'un plugin ajoute ou étend les capacités de RunJS, il est recommandé d'enregistrer le « mappage de contexte / documentation ctx / exemples de code » via les points d'extension officiels. Cela garantit que :
ctx.xxx.yyy.ctx structurées et des exemples.Ce chapitre présente deux points d'extension :
registerRunJSContextContribution(...)registerRunJSSnippet(...)registerRunJSContextContributionUtilisé pour enregistrer des « contributions » RunJS. Les cas d'utilisation typiques incluent :
RunJSContextRegistry (modelClass -> RunJSContext, y compris les scenes).RunJSDocMeta (descriptions/exemples/modèles de complétion pour l'API ctx) pour FlowRunJSContext ou un RunJSContext personnalisé.setupRunJSContexts().setupRunJSContexts() est déjà terminé, les enregistrements tardifs seront exécutés immédiatement (pas besoin de relancer la configuration).RunJSVersion.registerRunJSSnippetUtilisé pour enregistrer des extraits de code (snippets) d'exemple pour RunJS, utilisés pour :
Il est suggéré d'utiliser : plugin/<pluginName>/<topic>, par exemple :
plugin/plugin-my/fooplugin/plugin-my/api-request-exampleÉvitez les conflits avec les espaces de noms global/* ou scene/* du cœur (core).
ref existantes ne sont pas écrasées (retourne false sans lever d'erreur).{ override: true }.RunJSDocMeta : Descriptions/modèles de complétion (courts, structurés).scenes est correctement rempli pour améliorer la pertinence des complétions et des exemples.hidden(ctx)Certaines API ctx sont très spécifiques au contexte (par exemple, ctx.popup n'est disponible que lorsqu'une fenêtre contextuelle ou un tiroir est ouvert). Si vous souhaitez masquer ces API indisponibles lors de la complétion, vous pouvez définir hidden(ctx) pour l'entrée correspondante dans RunJSDocMeta :
true : Masque le nœud actuel et sa sous-arborescence.string[] : Masque des sous-chemins spécifiques sous le nœud actuel (prend en charge le retour de plusieurs chemins ; les chemins sont relatifs ; les sous-arborescences sont masquées en fonction de la correspondance de préfixe).hidden(ctx) prend en charge async : vous pouvez utiliser await ctx.getVar('ctx.xxx') pour déterminer la visibilité (à la discrétion de l'utilisateur). Il est recommandé de garder cette logique rapide et sans effets secondaires (par exemple, éviter les requêtes réseau).
Exemple : Afficher les complétions ctx.popup.* uniquement lorsque popup.uid existe.
Exemple : La popup est disponible mais certains sous-chemins sont masqués (chemins relatifs uniquement ; par exemple, masquer record et parent.record).
Remarque : CodeEditor active toujours le filtrage de complétion basé sur le ctx réel (mode « fail-open », ne lève pas d'erreurs).
info/meta d'exécution et API d'information de contexte (pour les complétions et les LLM)En plus de maintenir la documentation ctx de manière statique via FlowRunJSContext.define(), vous pouvez également injecter des info/meta au moment de l'exécution via FlowContext.defineProperty/defineMethod. Vous pouvez ensuite extraire des informations de contexte sérialisables pour CodeEditor ou les LLM en utilisant les API suivantes :
await ctx.getApiInfos(options?) : Informations statiques sur l'API.await ctx.getVarInfos(options?) : Informations sur la structure des variables (provenant de meta, prend en charge l'expansion par chemin/profondeur maximale).await ctx.getEnvInfos() : Instantané de l'environnement d'exécution.defineMethod(name, fn, info?)info prend en charge (tous facultatifs) :
description / detail / examplesref: string | { url: string; title?: string }params / returns (style JSDoc)Remarque :
getApiInfos()produit une documentation d'API statique et n'inclura pas de champs tels quedeprecated,disabledoudisabledReason.
Exemple : Fournir des liens de documentation pour ctx.refreshTargets().
defineProperty(key, { meta?, info? })meta : Utilisé pour l'interface utilisateur du sélecteur de variables (getPropertyMetaTree / FlowContextSelector). Il détermine la visibilité, la structure de l'arborescence, la désactivation, etc. (prend en charge les fonctions/async).
title / type / properties / sort / hidden / disabled / disabledReason / buildVariablesParamsinfo : Utilisé pour la documentation statique de l'API (getApiInfos) et les descriptions pour les LLM. Il n'affecte pas l'interface utilisateur du sélecteur de variables (prend en charge les fonctions/async).
title / type / interface / description / examples / ref / params / returnsLorsque seul meta est fourni (sans info) :
getApiInfos() ne retournera pas cette clé (car les docs d'API statiques ne sont pas déduites de meta).getVarInfos() construira la structure de la variable basée sur meta (utilisé pour les sélecteurs de variables/arborescences de variables dynamiques).Utilisée pour extraire les « informations sur les capacités de contexte disponibles ».
Paramètres communs :
getApiInfos({ version }) : Version de la documentation RunJS (par défaut v1).getVarInfos({ path, maxDepth }) : Découpage et profondeur d'expansion maximale (par défaut 3).Remarque : Les résultats retournés par les API ci-dessus ne contiennent pas de fonctions et conviennent à une sérialisation directe vers les LLM.
await ctx.getVar(path)Lorsque vous disposez d'une « chaîne de chemin de variable » (par exemple, provenant de la configuration ou d'une saisie utilisateur) et que vous souhaitez récupérer directement la valeur d'exécution de cette variable, utilisez getVar :
const v = await ctx.getVar('ctx.record.roles.id')path est un chemin d'expression commençant par ctx. (par exemple, ctx.record.id / ctx.record.roles[0].id).De plus : les méthodes ou propriétés commençant par un souligné _ sont traitées comme des membres privés et n'apparaîtront pas dans la sortie de getApiInfos() ou getVarInfos().