summaryrefslogtreecommitdiff
path: root/makima/frontend/src/routes/contracts.tsx
diff options
context:
space:
mode:
authorsoryu <soryu@soryu.co>2026-01-29 02:56:44 +0000
committersoryu <soryu@soryu.co>2026-01-29 02:56:44 +0000
commitf19acd400cc5bbe1fe51c004c50ee90d704240d8 (patch)
treeb7dcfd6926efcafd6eac33e713ebd321ec4284d0 /makima/frontend/src/routes/contracts.tsx
parent7af8561677cfdcfd23d099a25783c7fef51d1ba6 (diff)
downloadsoryu-f19acd400cc5bbe1fe51c004c50ee90d704240d8.tar.gz
soryu-f19acd400cc5bbe1fe51c004c50ee90d704240d8.zip
Fix contract type selection
Diffstat (limited to 'makima/frontend/src/routes/contracts.tsx')
-rw-r--r--makima/frontend/src/routes/contracts.tsx46
1 files changed, 8 insertions, 38 deletions
diff --git a/makima/frontend/src/routes/contracts.tsx b/makima/frontend/src/routes/contracts.tsx
index bb66215..fc76f60 100644
--- a/makima/frontend/src/routes/contracts.tsx
+++ b/makima/frontend/src/routes/contracts.tsx
@@ -96,49 +96,19 @@ function ContractsPageContent() {
const [redTeamEnabled, setRedTeamEnabled] = useState(false);
const [redTeamPrompt, setRedTeamPrompt] = useState("");
- // Fetch contract types when modal opens - merges built-in types with user templates
+ // Fetch contract types when modal opens - API returns both built-in and custom templates
useEffect(() => {
if (isCreating) {
setContractTypesLoading(true);
- // Load user templates from localStorage
- const loadUserTemplates = (): ContractTypeTemplate[] => {
- try {
- const saved = localStorage.getItem("makima_contract_templates");
- if (saved) {
- const templates = JSON.parse(saved);
- // Convert user templates to ContractTypeTemplate format, excluding built-ins
- return templates
- .filter((t: { isBuiltIn?: boolean }) => !t.isBuiltIn)
- .map((t: { id: string; name: string; description: string; phases: { id: string; name: string }[] }) => ({
- id: t.id,
- name: t.name,
- description: t.description,
- phases: t.phases.map((p: { id: string }) => p.id) as ContractPhase[],
- phaseNames: Object.fromEntries(t.phases.map((p: { id: string; name: string }) => [p.id, p.name])),
- defaultPhase: (t.phases[0]?.id || "execute") as ContractPhase,
- isBuiltin: false,
- }));
- }
- } catch {
- // Ignore localStorage errors
- }
- return [];
- };
-
listContractTypes()
.then((res) => {
- // Merge built-in types from API with user templates from localStorage
- const userTemplates = loadUserTemplates();
- // Filter out any user templates that have the same ID as built-in types
- const builtinIds = new Set(res.contractTypes.map(t => t.id));
- const uniqueUserTemplates = userTemplates.filter(t => !builtinIds.has(t.id));
- setContractTypes([...res.contractTypes, ...uniqueUserTemplates]);
+ setContractTypes(res.contractTypes);
setContractTypesLoading(false);
})
.catch((err) => {
console.error("Failed to fetch contract types:", err);
- // Fall back to built-in types + user templates
+ // Fall back to built-in types
const builtinTypes: ContractTypeTemplate[] = [
{
id: "simple",
@@ -165,10 +135,7 @@ function ContractsPageContent() {
isBuiltin: true,
},
];
- const userTemplates = loadUserTemplates();
- const builtinIds = new Set(builtinTypes.map(t => t.id));
- const uniqueUserTemplates = userTemplates.filter(t => !builtinIds.has(t.id));
- setContractTypes([...builtinTypes, ...uniqueUserTemplates]);
+ setContractTypes(builtinTypes);
setContractTypesLoading(false);
});
}
@@ -261,11 +228,14 @@ function ContractsPageContent() {
// Get default phase from contract types or fall back to static function
const selectedType = contractTypes.find((t) => t.id === contractType);
const defaultPhaseForType = selectedType?.defaultPhase || (contractType === "simple" ? "plan" : "research");
+ const isCustomTemplate = selectedType && !selectedType.isBuiltin;
const data: CreateContractRequest = {
name: newContractName.trim(),
description: newContractDescription.trim() || undefined,
- contractType: contractType,
+ // For custom templates, send templateId instead of contractType
+ contractType: isCustomTemplate ? undefined : contractType,
+ templateId: isCustomTemplate ? contractType : undefined,
initialPhase: initialPhase !== defaultPhaseForType ? initialPhase : undefined,
localOnly: localOnly || undefined,
redTeamEnabled: redTeamEnabled || undefined,