import { useState } from 'react' import { useTaskStore } from '../../stores/taskStore' import { useSettingsStore } from '../../stores/settingsStore' import { Modal } from '../shared/Modal' import { Input } from '../shared/Input' import { Textarea } from '../shared/Textarea' import { Button } from '../shared/Button' type Props = { open: boolean onClose: () => void } const FREQUENCY_OPTIONS = [ { value: '0 * * * *', label: 'Hourly' }, { value: '0 9 * * *', label: 'Daily' }, { value: '0 9 * * 1-5', label: 'Weekdays' }, { value: '0 9 * * 1', label: 'Weekly' }, { value: '0 9 1 * *', label: 'Monthly' }, ] const PERMISSION_OPTIONS = [ { value: '', label: 'Default' }, { value: 'ask', label: 'Ask permissions' }, { value: 'auto-accept', label: 'Auto accept edits' }, { value: 'plan', label: 'Plan mode' }, { value: 'bypass', label: 'Bypass permissions' }, ] export function NewTaskModal({ open, onClose }: Props) { const { createTask } = useTaskStore() const availableModels = useSettingsStore((s) => s.availableModels) const [name, setName] = useState('') const [description, setDescription] = useState('') const [prompt, setPrompt] = useState('') const [cron, setCron] = useState('0 9 * * *') const [model, setModel] = useState('') const [permissionMode, setPermissionMode] = useState('') const [folderPath, setFolderPath] = useState('') const [isSubmitting, setIsSubmitting] = useState(false) const [showAdvanced, setShowAdvanced] = useState(false) const canSubmit = name.trim() && prompt.trim() const handleSubmit = async () => { if (!canSubmit) return setIsSubmitting(true) try { await createTask({ name: name.trim(), description: description.trim() || undefined, cron, prompt: prompt.trim(), enabled: true, recurring: true, model: model || undefined, permissionMode: permissionMode || undefined, folderPath: folderPath.trim() || undefined, }) // Reset form setName('') setDescription('') setPrompt('') setCron('0 9 * * *') setModel('') setPermissionMode('') setFolderPath('') setShowAdvanced(false) onClose() } catch (err) { console.error('Failed to create task:', err) } finally { setIsSubmitting(false) } } const selectClass = 'h-10 px-3 rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] text-sm text-[var(--color-text-primary)] outline-none focus:border-[var(--color-border-focus)]' return ( } > {/* Info banner */}
Local tasks only run while your computer is awake.
setName(e.target.value)} placeholder="daily-code-review" /> setDescription(e.target.value)} placeholder="Review yesterday's commits..." />