import React from 'react'; import { Box, Text } from '@anthropic/ink'; import type { Theme } from '@anthropic/ink'; import type { Trigger } from './triggersApi.js'; import { cronToHuman } from '../../utils/cron.js'; type Props = | { mode: 'list'; triggers: Trigger[] } | { mode: 'detail'; trigger: Trigger } | { mode: 'created'; trigger: Trigger } | { mode: 'updated'; trigger: Trigger } | { mode: 'deleted'; id: string } | { mode: 'ran'; id: string; runId: string } | { mode: 'enabled'; id: string } | { mode: 'disabled'; id: string } | { mode: 'error'; message: string }; function TriggerRow({ trigger }: { trigger: Trigger }): React.ReactNode { const schedule = cronToHuman(trigger.cron_expression, { utc: true }); const nextRun = trigger.next_run ? new Date(trigger.next_run).toLocaleString() : '—'; const enabledText = trigger.enabled ? 'enabled' : 'disabled'; return ( {trigger.trigger_id} · {enabledText} {trigger.agent_id ? ( <> · agent: {trigger.agent_id} ) : null} Schedule: {schedule} Prompt: {trigger.prompt} Next run: {nextRun} ); } export function ScheduleView(props: Props): React.ReactNode { if (props.mode === 'list') { if (props.triggers.length === 0) { return ( No scheduled triggers. Use /schedule create <cron> <prompt> to create one. ); } return ( Scheduled Triggers ({props.triggers.length}) {props.triggers.map(trigger => ( ))} ); } if (props.mode === 'detail') { const { trigger } = props; const schedule = cronToHuman(trigger.cron_expression, { utc: true }); const nextRun = trigger.next_run ? new Date(trigger.next_run).toLocaleString() : '—'; const lastRun = trigger.last_run ? new Date(trigger.last_run).toLocaleString() : '—'; return ( Trigger: {trigger.trigger_id} Status:{' '} {trigger.enabled ? 'enabled' : 'disabled'} Schedule: {schedule} {trigger.agent_id ? Agent: {trigger.agent_id} : null} Next run: {nextRun} Last run: {lastRun} Prompt: {trigger.prompt} {trigger.created_at ? Created: {new Date(trigger.created_at).toLocaleString()} : null} ); } if (props.mode === 'created') { const { trigger } = props; const schedule = cronToHuman(trigger.cron_expression, { utc: true }); return ( Trigger created ID: {trigger.trigger_id} Schedule: {schedule} Prompt: {trigger.prompt} {trigger.agent_id ? Agent: {trigger.agent_id} : null} Status: {trigger.enabled ? 'enabled' : 'disabled'} ); } if (props.mode === 'updated') { const { trigger } = props; return ( Trigger updated ID: {trigger.trigger_id} Status: {trigger.enabled ? 'enabled' : 'disabled'} ); } if (props.mode === 'deleted') { return ( Trigger {props.id} deleted. ); } if (props.mode === 'ran') { return ( Trigger {props.id} fired. Run ID: {props.runId} ); } if (props.mode === 'enabled') { return ( Trigger {props.id} enabled. ); } if (props.mode === 'disabled') { return ( Trigger {props.id} disabled. ); } // error mode return ( {props.message} ); }