Aller au contenu

Playground

Ce changement est-il sûr à fusionner ?

Ce changement est-il sûr à fusionner ? Supprimer un dossier sans vérifier le chemin est bloqué ; après un contrôle de chemin, le risque baisse.

Ce que montre cet exemple. Un reviewer, humain ou agent, a souvent besoin d’une porte rapide avant un merge : quel est le risque de ce diff, et met-il les données en danger ? Cet exemple pose les deux en une requête. risk est un score à quatre niveaux (Aucun risque, Faible, Élevé, Bloquer le merge) et security une question oui/non : « Ce changement affecte-t-il la sécurité ou la sûreté des données ? »

Entrée et résultat d’exemple (données d’exemple, pas une exécution live). Le diff modifie scripts/clean.sh, remplaçant rm -rf ./build/cache par un chemin lu depuis la config : DIR="$(read_config cache_dir)" puis rm -rf "$DIR/". Le contexte note que cache_dir peut être absent ; alors read_config renvoie une chaîne vide et la commande devient rm -rf "/". Résultat : Bloquer le merge, 68 % (Élevé 27 %). Probabilité sécurité : 0,86. Ajoutez une ligne : "${DIR:?cache_dir is not set}" pour qu’une valeur absente fasse échouer le script au lieu de supprimer la racine. Résultat : Faible, 63 % (Élevé 22 %, Aucun risque 12 %). Probabilité sécurité : 0,31.

Comment l’utiliser. La sortie est un score et une probabilité, pas un commentaire de review — branchable en CI ou boucle d’agent : bloquer si « Bloquer le merge » est élevé, envoyer les scores moyens à un humain, laisser passer le reste. Fixez les seuils avec l’historique du dépôt. La requête d’exemple utilise Decider (decider-v1.1).

Questions fréquentes

Explique-t-il pourquoi un diff est risqué ?

Non. Il renvoie seulement un score et des probabilités. Utilisez un modèle génératif pour une review écrite.

Puis-je modifier les niveaux de risque ?

Oui. Les niveaux sont dans criteria ; vous pouvez les renommer ou en changer le nombre, dans la plage indiquée dans Model info de chaque modèle.

Ces résultats viennent-ils d’une exécution live ?

Non. La page affiche des données d’exemple qui ne changent pas avec le modèle sélectionné. Connectez-vous pour scorer vos propres diffs.

Les résultats d’exemple ne changent pas avec le modèle sélectionné.

Requête

state
diff
--- a/scripts/clean.sh+++ b/scripts/clean.sh@@-rm -rf ./build/cache+DIR="$(read_config cache_dir)"+rm -rf "$DIR/"

cache_dir may be unset; read_config then returns an empty string

Résultats

Données d’exemple
Comparer deux exemples

Ces deux exemples ne diffèrent que d’un détail. Le résultat change avec eux.

Ce qui a changéSans contrôle de chemin → chemin vérifié

Ces résultats sont des données d’exemple, pas une exécution live. Connectez-vous pour essayer avec votre contenu.
risk: 1 · Faible → 3 · Bloquer la fusion security: Confiance = 0.31 → Confiance = 0.86
riskscore
3 · Bloquer la fusion
Confiance par option
0 · Aucun risque
1%
1 · Faible
4%
2 · Élevé
27%
3 · Bloquer la fusion
68%
securitynoul
Confiance = 0.86Confiance

Copier le code

Définissez SYSTEM_ONE_API_KEY. L’extrait utilise un ID de modèle publié dans le catalogue.

JSON de requête
application/json
{"model":"decider-v1.1","state":{"diff":"--- a/scripts/clean.sh\n+++ b/scripts/clean.sh\n@@\n-rm -rf ./build/cache\n+DIR=\"$(read_config cache_dir)\"\n+rm -rf \"$DIR/\"","context":"cache_dir may be unset; read_config then returns an empty string"},"questions":{"risk":{"type":"score","instructions":"Rate the merge risk of this diff.","criteria":["Aucun risque","Faible","Élevé","Bloquer la fusion"]},"security":{"type":"noul","instructions":"Does this change affect security or data safety?"}}}
cURL · POST /v1/systemone
sh
curl "https://system-one.dev/v1/systemone" \  -H "Authorization: Bearer $SYSTEM_ONE_API_KEY" \  -H 'Content-Type: application/json' \  -H 'Idempotency-Key: saved-operation-id' \  --data '{"model":"decider-v1.1","state":{"diff":"--- a/scripts/clean.sh\n+++ b/scripts/clean.sh\n@@\n-rm -rf ./build/cache\n+DIR=\"$(read_config cache_dir)\"\n+rm -rf \"$DIR/\"","context":"cache_dir may be unset; read_config then returns an empty string"},"questions":{"risk":{"type":"score","instructions":"Rate the merge risk of this diff.","criteria":["Aucun risque","Faible","Élevé","Bloquer la fusion"]},"security":{"type":"noul","instructions":"Does this change affect security or data safety?"}}}'
TypeScript
TypeScript
// npm install @system-one-ai/core@0.8.0 @system-one-ai/adapter-system-one@0.7.0 @system-one-ai/transport-fetch@0.8.0import { createSystemOne, choice, score, booleanQuestion } from '@system-one-ai/core';import { systemOneAdapter } from '@system-one-ai/adapter-system-one';import { createFetchTransport } from '@system-one-ai/transport-fetch';const client = createSystemOne({  baseURL: "https://system-one.dev/v1",  apiKey: process.env.SYSTEM_ONE_API_KEY!,  model: "decider-v1.1",  adapter: systemOneAdapter,  transport: createFetchTransport(),  timeoutMs: 30_000,  maxRetries: 0,});const result = await client.evaluate({  state: {    "diff": "--- a/scripts/clean.sh\n+++ b/scripts/clean.sh\n@@\n-rm -rf ./build/cache\n+DIR=\"$(read_config cache_dir)\"\n+rm -rf \"$DIR/\"",    "context": "cache_dir may be unset; read_config then returns an empty string"  },  questions: {  risk: score("Rate the merge risk of this diff.", ["Aucun risque", "Faible", "Élevé", "Bloquer la fusion"]),  security: booleanQuestion("Does this change affect security or data safety?"),  },}, { headers: { 'Idempotency-Key': crypto.randomUUID() } });result.answers.risk.scoreresult.answers.security.probabilityresult.response.requestId;