summaryrefslogtreecommitdiff
path: root/frontend/src/components/ContractCreateModal.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/components/ContractCreateModal.tsx')
-rw-r--r--frontend/src/components/ContractCreateModal.tsx185
1 files changed, 0 insertions, 185 deletions
diff --git a/frontend/src/components/ContractCreateModal.tsx b/frontend/src/components/ContractCreateModal.tsx
deleted file mode 100644
index e1d9732..0000000
--- a/frontend/src/components/ContractCreateModal.tsx
+++ /dev/null
@@ -1,185 +0,0 @@
-import React, { useState } from 'react'
-
-interface ContractCreateModalProps {
- isOpen: boolean
- onClose: () => void
- onCreated: () => void
-}
-
-interface CreateContractForm {
- name: string
- description: string
- contractType: string
- redTeamEnabled: boolean
- redTeamPrompt: string
-}
-
-export function ContractCreateModal({ isOpen, onClose, onCreated }: ContractCreateModalProps) {
- const [form, setForm] = useState<CreateContractForm>({
- name: '',
- description: '',
- contractType: 'simple',
- redTeamEnabled: false,
- redTeamPrompt: '',
- })
- const [loading, setLoading] = useState(false)
- const [error, setError] = useState<string | null>(null)
-
- if (!isOpen) return null
-
- const handleSubmit = async (e: React.FormEvent) => {
- e.preventDefault()
- setLoading(true)
- setError(null)
-
- try {
- const response = await fetch('/api/v1/contracts', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- },
- body: JSON.stringify({
- name: form.name,
- description: form.description || undefined,
- contract_type: form.contractType,
- red_team_enabled: form.redTeamEnabled,
- red_team_prompt: form.redTeamEnabled && form.redTeamPrompt ? form.redTeamPrompt : undefined,
- }),
- })
-
- if (!response.ok) {
- const errorData = await response.json().catch(() => ({}))
- throw new Error(errorData.message || `Failed to create contract: ${response.statusText}`)
- }
-
- // Reset form and close modal
- setForm({
- name: '',
- description: '',
- contractType: 'simple',
- redTeamEnabled: false,
- redTeamPrompt: '',
- })
- onCreated()
- onClose()
- } catch (err) {
- setError(err instanceof Error ? err.message : 'Unknown error')
- } finally {
- setLoading(false)
- }
- }
-
- return (
- <div className="modal-overlay" onClick={onClose}>
- <div className="settings-modal contract-create-modal" onClick={(e) => e.stopPropagation()}>
- <div className="modal-header">
- <h2 className="modal-title">Create Contract</h2>
- <button className="modal-close-btn" onClick={onClose}>
- ×
- </button>
- </div>
-
- <form onSubmit={handleSubmit}>
- <div className="modal-content">
- {error && (
- <div className="form-error">
- {error}
- </div>
- )}
-
- <div className="settings-section">
- <h3>Contract Details</h3>
-
- <div className="setting-item">
- <label>
- Name
- <input
- type="text"
- value={form.name}
- onChange={(e) => setForm({ ...form, name: e.target.value })}
- placeholder="Enter contract name"
- required
- className="form-input"
- />
- </label>
- </div>
-
- <div className="setting-item">
- <label>
- Description
- <textarea
- value={form.description}
- onChange={(e) => setForm({ ...form, description: e.target.value })}
- placeholder="Enter contract description (optional)"
- className="form-textarea"
- rows={3}
- />
- </label>
- </div>
-
- <div className="setting-item">
- <label>
- Contract Type
- <select
- value={form.contractType}
- onChange={(e) => setForm({ ...form, contractType: e.target.value })}
- className="form-select"
- >
- <option value="simple">Simple</option>
- <option value="specification">Specification</option>
- <option value="execute">Execute</option>
- </select>
- </label>
- </div>
- </div>
-
- <div className="settings-section">
- <h3>Red Team Monitoring</h3>
-
- <div className="setting-item">
- <label className="checkbox-label">
- <input
- type="checkbox"
- checked={form.redTeamEnabled}
- onChange={(e) => setForm({ ...form, redTeamEnabled: e.target.checked })}
- />
- <span>Enable Red Team monitoring</span>
- </label>
- <div className="setting-description">
- Spawns a parallel task that monitors work output for quality and compliance
- </div>
- </div>
-
- {form.redTeamEnabled && (
- <div className="setting-item red-team-prompt-container">
- <label>
- Custom review criteria (optional)
- <textarea
- value={form.redTeamPrompt}
- onChange={(e) => setForm({ ...form, redTeamPrompt: e.target.value })}
- placeholder="Enter custom criteria for the red team to evaluate against... (e.g., 'Ensure all functions have proper error handling', 'Verify security best practices are followed')"
- className="form-textarea"
- rows={4}
- />
- </label>
- <div className="setting-description">
- Provide specific criteria for the red team to focus on during reviews
- </div>
- </div>
- )}
- </div>
- </div>
-
- <div className="modal-footer">
- <button type="button" className="modal-btn secondary" onClick={onClose} disabled={loading}>
- Cancel
- </button>
- <button type="submit" className="modal-btn primary" disabled={loading || !form.name.trim()}>
- {loading ? 'Creating...' : 'Create Contract'}
- </button>
- </div>
- </form>
- </div>
- </div>
- )
-}