From 45a433c0eb63cae1322203ee14292f1c427a09c9 Mon Sep 17 00:00:00 2001
From: soryu
Date: Thu, 29 Jan 2026 01:26:17 +0000
Subject: feat: Add Red Team UI to makima/frontend contract creation (#45)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Add redTeamEnabled and redTeamPrompt state to contracts page
- Add "Enable Red Team Monitoring" checkbox with description
- Add conditional "Custom Review Criteria" textarea when enabled
- Include redTeamEnabled/redTeamPrompt in CreateContractRequest
- Reset red team fields when canceling contract creation
- Add redTeamEnabled to ContractSummary and Contract types
- Add redTeamEnabled/redTeamPrompt to CreateContractRequest type
- Add Red Team badge (🔍) to ContractList for enabled contracts
Co-authored-by: Claude Opus 4.5
---
.../src/components/contracts/ContractList.tsx | 5 ++
makima/frontend/src/lib/api.ts | 10 ++++
makima/frontend/src/routes/contracts.tsx | 59 ++++++++++++++++++++++
3 files changed, 74 insertions(+)
(limited to 'makima/frontend')
diff --git a/makima/frontend/src/components/contracts/ContractList.tsx b/makima/frontend/src/components/contracts/ContractList.tsx
index 98f8ff6..532ab87 100644
--- a/makima/frontend/src/components/contracts/ContractList.tsx
+++ b/makima/frontend/src/components/contracts/ContractList.tsx
@@ -136,6 +136,11 @@ export function ContractList({
Local
)}
+ {contract.redTeamEnabled && (
+
+ 🔍 Red Team
+
+ )}
([]);
const [contractTypesLoading, setContractTypesLoading] = useState(false);
const [localOnly, setLocalOnly] = useState(false);
+ const [redTeamEnabled, setRedTeamEnabled] = useState(false);
+ const [redTeamPrompt, setRedTeamPrompt] = useState("");
// Fetch contract types when modal opens - merges built-in types with user templates
useEffect(() => {
@@ -266,6 +268,8 @@ function ContractsPageContent() {
contractType: contractType,
initialPhase: initialPhase !== defaultPhaseForType ? initialPhase : undefined,
localOnly: localOnly || undefined,
+ redTeamEnabled: redTeamEnabled || undefined,
+ redTeamPrompt: redTeamEnabled && redTeamPrompt.trim() ? redTeamPrompt.trim() : undefined,
};
try {
@@ -341,6 +345,8 @@ function ContractsPageContent() {
setRepoUrl("");
setRepoPath("");
setLocalOnly(false);
+ setRedTeamEnabled(false);
+ setRedTeamPrompt("");
setCreateError(null);
}, []);
@@ -712,6 +718,59 @@ function ContractsPageContent() {
+ {/* Red Team Monitoring */}
+
+
+
+
+
+
+ Spawns a parallel task to monitor work output for quality and compliance.
+
+ {redTeamEnabled && (
+
+
+
+ )}
+
+
{/* Repository Configuration */}