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}
);
}