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 steps, Set 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 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"); } } }