import React, { useState } from 'react'; import { ShieldCheck, Plus, Play, Trash2, AlertTriangle, CheckCircle2, XCircle, Sliders, Filter, Code2, FileCheck2 } from 'lucide-react'; import { api } from '../api/client'; export default function PolicyRulesLab({ rules, currentWorkspace, onCreateRule, onDeleteRule, onValidate, loading }) { const [showAddModal, setShowAddModal] = useState(false); const [ruleName, setRuleName] = useState(''); const [ruleType, setRuleType] = useState('CONFIDENCE_THRESHOLD'); const [conditionVal, setConditionVal] = useState('0.85'); const [isBlocking, setIsBlocking] = useState(true); const [lintResults, setLintResults] = useState(null); const [validating, setValidating] = useState(false); const handleCreate = async (e) => { e.preventDefault(); if (!ruleName.trim()) return; let condition = {}; if (ruleType === 'CONFIDENCE_THRESHOLD') { condition = { min_confidence: parseFloat(conditionVal) || 0.85 }; } else if (ruleType === 'REGEX_FORMAT') { condition = { pattern: conditionVal }; } else { condition = { field: conditionVal }; } await onCreateRule(ruleName.trim(), ruleType, condition, isBlocking); setRuleName(''); setShowAddModal(false); }; const runLinter = async () => { if (!currentWorkspace?.id) return; setValidating(true); try { const res = await onValidate(); setLintResults(res); } finally { setValidating(false); } }; return (
Automated quality gates and regulatory guardrails executed before knowledge merges.