Saltar al contenido

Playground

¿Es seguro fusionar este cambio?

¿Es seguro fusionar este cambio? Borrar una carpeta sin comprobar la ruta se bloquea; tras añadir una comprobación de ruta, el riesgo baja.

Qué muestra este ejemplo. Un revisor, humano o agente, suele necesitar una puerta rápida antes del merge: ¿qué tan arriesgado es este diff y pone datos en riesgo? Este ejemplo pregunta ambas cosas en una petición. risk es una puntuación de cuatro niveles (Sin riesgo, Bajo, Alto, Bloquear fusión) y security una pregunta sí/no: «¿Este cambio afecta a la seguridad o a la seguridad de los datos?»

Entrada y resultado de ejemplo (datos de ejemplo, no una ejecución en vivo). El diff edita scripts/clean.sh, sustituyendo rm -rf ./build/cache por una ruta leída de la config: DIR="$(read_config cache_dir)" y luego rm -rf "$DIR/". El contexto indica que cache_dir puede no estar definido; entonces read_config devuelve cadena vacía y el comando se vuelve rm -rf "/". Resultado: Bloquear fusión, 68 % (Alto 27 %). Probabilidad de seguridad: 0,86. Añade una línea : "${DIR:?cache_dir is not set}" para que un valor vacío falle el script en lugar de borrar la raíz. Resultado: Bajo, 63 % (Alto 22 %, Sin riesgo 12 %). Probabilidad de seguridad baja a 0,31.

Cómo usarlo. La salida es puntuación y probabilidad, no un comentario de revisión, así que encaja en CI o un bucle de agente: bloquear si «Bloquear fusión» es alto, enviar puntuaciones medias a un humano y dejar pasar el resto. Fija umbrales con el historial de tu repositorio. La petición de ejemplo usa Decider (decider-v1.1).

Preguntas frecuentes

¿Explica por qué un diff es arriesgado?

No. Solo devuelve una puntuación y probabilidades. Usa un modelo generativo si necesitas una revisión escrita.

¿Puedo cambiar los niveles de riesgo?

Sí. Los niveles están en criteria; puedes renombrarlos o cambiar cuántos hay, dentro del rango de Model info de cada modelo.

¿Estos resultados son de una ejecución en vivo?

No. La página muestra datos de ejemplo que no cambian con el modelo seleccionado. Inicia sesión para puntuar tus propios diffs.

Los resultados de ejemplo no cambian con el modelo seleccionado.

Solicitud

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

Resultados

Datos de ejemplo
Comparar dos ejemplos

Estos dos ejemplos difieren en un solo detalle. El resultado cambia con ellos.

Qué cambióSin comprobación de ruta → ruta comprobada

Estos resultados son datos de ejemplo, no una ejecución en vivo. Inicia sesión para probarlos con tu contenido.
risk: 1 · Bajo → 3 · Bloquear el merge security: Confianza = 0.31 → Confianza = 0.86
riskscore
3 · Bloquear el merge
Confianza por opción
0 · Sin riesgo
1%
1 · Bajo
4%
2 · Alto
27%
3 · Bloquear el merge
68%
securitynoul
Confianza = 0.86Confianza

Copiar el código

Configura SYSTEM_ONE_API_KEY. El fragmento usa un ID de modelo publicado en el catálogo.

JSON de la solicitud
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":["Sin riesgo","Bajo","Alto","Bloquear el merge"]},"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":["Sin riesgo","Bajo","Alto","Bloquear el merge"]},"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.", ["Sin riesgo", "Bajo", "Alto", "Bloquear el merge"]),  security: booleanQuestion("Does this change affect security or data safety?"),  },}, { headers: { 'Idempotency-Key': crypto.randomUUID() } });result.answers.risk.scoreresult.answers.security.probabilityresult.response.requestId;