Volver al índice

src/main/java/ar/com/companeros/decision/ToolDecision.java

package ar.com.companeros.decision;

import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;

/** Plan propuesto; sus pasos todavía necesitan validación física al ejecutarse. */
public record ToolDecision(String goal, List<Step> steps, Set<String> permissions, String briefRationale) {
    public ToolDecision {
        Objects.requireNonNull(goal); Objects.requireNonNull(briefRationale);
        steps = List.copyOf(steps); permissions = Set.copyOf(permissions);
        if (goal.isBlank() || goal.length() > 512 || briefRationale.length() > 1024
                || steps.size() > 16 || permissions.size() > 16)
            throw new IllegalArgumentException("Plan fuera de límite");
    }

    public record Step(String toolId, int version, Map<String, String> arguments) {
        public Step {
            Objects.requireNonNull(toolId); arguments = Map.copyOf(arguments);
            if (toolId.isBlank() || toolId.length() > 128 || version < 1 || arguments.size() > 16
                    || arguments.entrySet().stream().anyMatch(e -> e.getKey().isBlank()
                        || e.getKey().length() > 64 || e.getValue().length() >
                            ((toolId.equals("propose_tool") || toolId.equals("propose_infected_tool")) && e.getKey().equals("manifest") ? 4096 : 512)))
                throw new IllegalArgumentException("Paso fuera de límite");
        }
    }
}