Scrydon

Livrer et gérer les intégrations personnalisées

Livrez des intégrations personnalisées via des packs (sources Git/OCI), et gérez les intégrations installées

Le téléversement manuel d'archive a été supprimé. Les intégrations personnalisées sont désormais livrées exclusivement via des packs — une source Git ou OCI vers laquelle votre CI/CD publie, installée depuis le catalogue de packs de votre organisation. Publiez votre .bundle.tar.gz dans un pack plutôt que de le téléverser directement. Consultez Sources de packs et Conditionner une intégration personnalisée dans un pack.

Portées des intégrations personnalisées

Les identités d'intégration réservent trois portées. Les importations d'organisation constituent actuellement le chemin pris en charge pour les intégrations personnalisées :

PortéeOrigineVisibilitéComment c'est livré
Première partie (org:scrydon:)Intégré dans l'image DockerToutes les organisationsLivré avec les versions de Scrydon
Plateforme (org:platform:)Réservée aux packs à portée plateformeToutes les organisationsPas encore activée ; nécessite un stockage d'artefacts dédié appartenant à la plateforme
Organisation (org:{orgId}:)Source de pack de l'organisationOrganisation uniqueL'admin de l'organisation installe depuis le catalogue de packs de l'organisation

Toute intégration importée s'exécute dans un Worker Thread isolé. Seul le code livré avec Scrydon sous la portée exacte org:scrydon: peut utiliser un adaptateur de confiance ; un nom de fournisseur identique n'accorde jamais cette confiance au code importé.

Livraison via une source de pack

Publiez votre .bundle.tar.gz compilé en tant qu'entrée de contenu integration dans un pack, vers une source Git ou OCI que votre CI/CD contrôle. Consultez Conditionner une intégration personnalisée dans un pack.

Accédez à Paramètres > Plateforme > Intégrations → l'onglet Personnalisé (URL directe : /settings/platform/integrations#custom) et enregistrez votre source de pack. Les sources synchronisent les packs dans le catalogue de packs de votre organisation. Consultez Sources de packs.

Les intégrations personnalisées synchronisées apparaissent dans Ajouter une intégration sous Depuis votre catalogue de packs — en en ajoutant une, elle est installée et activée immédiatement (votre installation explicite fait office de révision). Une source signée avec cosign est également fiable pour les installations non interactives ; les synchronisations automatiques non signées passent en En attente de révision.

Lorsqu'un nouvel artefact est publié, la carte affiche un badge Mise à jour ; en cliquant dessus, vous accédez à Paramètres → Plateforme → Packs où vous pouvez examiner l'impact sur les workflows et appliquer la mise à jour. Consultez Gestion des versions de packs.

Ce qui se passe lors de l'installation

Lorsqu'un pack contenant une entrée integration est installé, la plateforme exécute le même pipeline de bundle qu'auparavant :

Extrait le .tar.gz avec des vérifications de sécurité :

  • Aucun lien symbolique autorisé
  • Aucun chemin absolu
  • Aucune traversée de chemin (../)
  • Seules les extensions de fichiers autorisées (.js, .js.map, .json, .svg, .png, .jpg)
  • Taille extraite maximale : 100 Mo

Valide manifest.json par rapport au ManifestSchema (Zod) :

  • Format d'identifiant vendeur : /^[a-z][a-z0-9-]*$/
  • Les identifiants d'outils référencent des préfixes vendeur valides
  • Les types d'informations d'identification d'authentification sont valides
  • Pas d'identifiants de produit en double
  • Les champs requis sont présents

Écrit l'artefact dans le stockage blob :

00_organization/integration-bundles/{vendorId}/{version}/bundle.tar.gz

Enregistre l'intégration avec l'identifiant vendeur, la version, le JSON du manifeste, la clé de stockage, le hachage SHA-256 et la portée dans l'enregistrement d'intégration installée de l'organisation (integration_bundle).

Gérer les intégrations personnalisées installées

Statuts

StatutSignification
ActifL'intégration personnalisée est disponible pour une utilisation dans les workflows
DésactivéL'intégration personnalisée est installée mais non disponible (désactivée manuellement)
En attente de révisionInstallée depuis une synchronisation de pack non signée et non interactive — en attente de révision (signez la source ou installez explicitement pour l'activer)
ÉchecL'intégration personnalisée n'a pas pu être chargée à l'exécution (vérifiez le message d'erreur)

Activer / Désactiver

Activez ou désactivez les produits d'une intégration personnalisée depuis la boîte de dialogue de détail du vendeur sous Paramètres > Plateforme > Intégrations. La désactivation la supprime de l'éditeur de workflows mais ne supprime pas les fichiers stockés.

Gestion des versions

Publiez une nouvelle version de pack pour mettre à jour l'intégration. La plateforme stocke chaque version par {vendorId}/{version}/, de sorte que plusieurs versions peuvent coexister ; la version active est la version active de plus haut semver (ou la version épinglée si votre organisation en a épinglé une — voir Gestion des versions de packs).

Désinstaller ou remplacer une intégration personnalisée interrompra tous les workflows qui référencent ses outils. Vérifiez d'abord qu'aucun workflow n'en dépend.

Séquence de démarrage

Au démarrage de la plateforme :

  1. Analyse des bundles première partie — analyse manifest.json depuis /app/bundles/ (image Docker)
  2. Analyse des bundles de plateforme — analyse les manifestes depuis le stockage de la plateforme
  3. Analyse des bundles d'organisation — analyse les manifestes depuis le stockage de chaque organisation
  4. Remplissage du catalogue de manifestes — métadonnées uniquement, aucun code vendeur chargé
  5. Enregistrement du type SandboxActor auprès du runtime Dapr
  6. Prêt à servir — les acteurs s'activent à la demande (première exécution d'outil)

Le code d'intégration personnalisée n'est jamais chargé au démarrage. La plateforme lit uniquement les fichiers manifest.json (analyse JSON légère). Le code se charge de façon différée lors de la première invocation d'un outil, dans un Worker Thread en bac à sable.

Politiques d'organisation

Les politiques d'organisation (configurées par les admins) régissent le comportement des intégrations personnalisées :

Politique d'exécution

{
  "maxConcurrentExecutions": 10,
  "maxTimeoutSeconds": 30,
  "allowedCapabilities": ["llm", "stt", "tools"]
}

Politique de gouvernance

{
  "allowedVendorScopes": ["scrydon", "platform"],
  "blockedVendorIds": []
}
  • blockedVendorIds — identifiants vendeur bloqués à l'installation (appliqué lors de l'installation d'un pack)
  • allowedCapabilities — types de capacités autorisés

Les anciens champs allowOrgUploads / requireApprovalForUploads régissaient le flux de téléversement manuel supprimé et n'ont plus aucun effet. L'activation d'une intégration livrée par pack à l'installation est régie par la signature de la source et la politique d'installation explicite (voir les étapes de livraison ci-dessus), et non par ces champs.

Format du package

Chaque intégration personnalisée est conditionnée sous forme d'archive .tar.gz avec cette structure :

{vendorId}-{version}.bundle.tar.gz
├── manifest.json           (métadonnées vendeur, JSON Schemas, définitions UI)
├── dist/
│   └── index.js            (ESM compilé, minifié ; toutes les dépendances intégrées)
├── meta/                   (généré automatiquement)
│   ├── sbom.cdx.json       (SBOM CycloneDX 1.6)
│   └── metafile.json       (graphe de dépendances esbuild)
└── assets/                 (optionnel)
    └── icon.svg, icon.png  (icônes vendeur/produit)

Génération du SBOM

Chaque artefact d'intégration personnalisée inclut automatiquement une nomenclature logicielle (SBOM) CycloneDX 1.6 dans meta/sbom.cdx.json. Le SBOM est généré lors de sdk-authoring integrations build sans outils ni configuration supplémentaires.

Contenu du SBOM

Le SBOM liste chaque package NPM qu'esbuild a intégré dans dist/index.js :

  • Nom et version du package — exactement ce qui est dans le bundle
  • Licence — identifiant de licence SPDX depuis package.json
  • URL du package (purl) — identifiant lisible par machine (pkg:npm/zod@3.24.0)
  • Preuve — chemins de fichiers prouvant que le package est réellement intégré (le code élimé par tree-shaking est exclu)

Le SBOM n'inclut que les packages qu'esbuild a réellement intégrés. Si une dépendance a été éliminée par tree-shaking, elle n'apparaîtra pas — ce qui fait du SBOM un reflet fidèle de ce qui est livré dans votre bundle.

Comment il est généré

Lors de sdk-authoring integrations build, l'outil CLI :

  1. Exécute esbuild avec metafile: true pour capturer tous les fichiers d'entrée
  2. Extrait les packages NPM uniques depuis les chemins node_modules/ dans le metafichier
  3. Lit le package.json de chaque package pour le nom, la version, la licence et la description
  4. Sérialise tout en JSON CycloneDX 1.6
  5. Écrit le résultat dans meta/sbom.cdx.json aux côtés du metafichier esbuild

Aucun outil ou dépendance externe n'est requis — la génération est intégrée dans l'outil CLI.

Utilisation par les admins

Après avoir installé une intégration personnalisée, l'onglet Dépendances dans la boîte de dialogue de détail du vendeur affiche le nombre de composants SBOM dans l'en-tête de l'onglet et liste tous les packages détectés automatiquement aux côtés des dépendances déclarées. Consultez Révision d'une intégration personnalisée avant activation pour le workflow de révision complet.

Conformité

Le format CycloneDX est largement pris en charge par les outils de conformité. Pour les environnements nécessitant SPDX, convertissez avec :

cyclonedx-cli convert --input-file meta/sbom.cdx.json --output-file sbom.spdx.json --output-format spdxjson

Le graphe de dépendances esbuild brut est également disponible dans meta/metafile.json pour le débogage. Vous pouvez le visualiser sur esbuild.github.io/analyze.

Révision d'une intégration personnalisée avant activation

Après l'installation d'une intégration personnalisée, les administrateurs peuvent en examiner le contenu avant de l'activer pour l'organisation. La boîte de dialogue de détail du vendeur offre une expérience de révision structurée répartie en plusieurs onglets.

Onglet Capacités

Affiche tous les produits, outils, déclencheurs et capacités d'exécution que fournit l'intégration personnalisée. Les administrateurs peuvent activer ou désactiver des blocs individuels depuis cet onglet. Les capacités d'intelligence (LLM, STT, TTS, Embedding) affichent le nombre de modèles et prennent en charge la configuration de politiques en mode liste d'autorisation. Consultez Capacités pour plus de détails.

Onglet Dépendances

L'onglet Dépendances affiche deux vues complémentaires de l'arborescence de dépendances de l'intégration personnalisée :

  • Dépendances déclarées — entrées rédigées manuellement depuis defineProduct({ dependencies: [...] }) qui incluent une reason lisible par l'homme pour chaque dépendance.
  • Dépendances détectées automatiquement (SBOM) — l'ensemble complet des packages NPM qu'esbuild a intégrés dans dist/index.js, extrait depuis meta/sbom.cdx.json. Chaque entrée affiche le nom du package, la version, la licence et une URL de package lisible par machine (purl).

L'en-tête de l'onglet affiche le nombre total de composants SBOM afin que les administrateurs puissent évaluer rapidement l'empreinte de dépendances de l'intégration personnalisée. Les politiques de dépendances de l'organisation (niveaux de risque, listes de blocage, blocage des scripts post-installation) sont évaluées à la fois par rapport aux dépendances déclarées et détectées automatiquement.

Si une dépendance est bloquée par la politique de l'organisation, elle est signalée dans l'onglet Dépendances avec la raison (par ex. « Le risque 'élevé' dépasse le maximum 'moyen' » ou « Contient des scripts post-installation »). Les dépendances bloquées empêchent l'activation de l'intégration personnalisée jusqu'à ce que la politique soit ajustée ou que le .bundle.tar.gz soit reconstruit sans le package problématique.

Onglet Configuration

Affiche la configuration d'authentification du vendeur (OAuth, Clé API, Jeton Bot, ou Aucune) et permet aux administrateurs de configurer les informations d'identification avant d'activer les capacités du vendeur.

Disposition du stockage

Première partie (intégré dans l'image Docker) :
  /app/bundles/{vendorId}/dist/index.js

Packs à portée plateforme :
  {platformPrefix}/integration-bundles/{vendorId}/{version}/bundle.tar.gz

Packs à portée organisation :
  {storageKeyPrefix}/00_organization/integration-bundles/{vendorId}/{version}/bundle.tar.gz

Dépannage

L'installation échoue avec « Manifeste invalide »

Exécutez le validateur CLI localement avant de publier le pack pour voir les erreurs détaillées :

bunx @scrydon/sdk-authoring integrations test --level static

Problèmes courants :

  • L'identifiant vendeur contient des majuscules ou des caractères spéciaux
  • L'identifiant d'outil ne commence pas par le préfixe de l'identifiant vendeur
  • Champs requis manquants (id, name, version, icon, auth)
  • Le schéma Zod utilise des types non pris en charge (l'extracteur convertit Zod → JSON Schema)

Le statut de l'intégration personnalisée affiche « Échec »

Vérifiez le message d'erreur dans la boîte de dialogue de détail du vendeur (et les logs du serveur). Causes fréquentes :

  • dist/index.js contient une erreur de syntaxe
  • L'export par défaut n'est pas un résultat de defineVendor()
  • Instruction export default manquante
  • L'import à l'exécution échoue (assurez-vous que toutes les dépendances sont intégrées — esbuild devrait les inclure)

L'outil n'apparaît pas dans l'éditeur de workflows

  1. Vérifiez que le pack qui porte l'intégration est installé (Paramètres > Plateforme > Packs) et que sa version est active
  2. Vérifiez que le produit est activé pour votre organisation dans Paramètres > Plateforme > Intégrations
  3. Vérifiez la category du bloc — elle doit être "tools", "blocks" ou "triggers" pour apparaître dans la section correcte de la palette
Sur cette page

Sur cette page