import type { ReactNode } from 'react'; import { Hand } from './Icons'; import type { Task } from '../types'; export type CardKind = 'confirm' | 'blocker' | 'question' | 'result' | 'danger' | 'info'; export interface CardAction { label: string; kind?: 'primary' | 'secondary' | 'danger' | 'text'; disabled?: boolean; onClick: () => void; } export function ActionCard({ kind, title, body, actions = [], children }: { kind: CardKind; title: string; body?: string; actions?: CardAction[]; children?: ReactNode; }) { return (
{title}
{body &&
{body}
} {children} {actions.length > 0 && (
{actions.map(action => ( ))} 也可以直接在下方输入回答
)}
); } export type PauseKind = 'confirm' | 'blocker-self' | 'blocker-other' | 'question'; export function classifyPause(task: Task): PauseKind { const pending = task.inputs.pending_blocker; if (pending) return pending.resolution === 'self' ? 'blocker-self' : 'blocker-other'; const question = task.pause_reason ?? ''; if ((question.includes('确认') && question.includes('提交')) || question.includes('即将提交')) return 'confirm'; return 'question'; } export function PauseCard({ task, pending, onAnswer, onTakeover }: { task: Task; pending: boolean; onAnswer: (text: string) => void; onTakeover: () => void; }) { const kind = classifyPause(task); const question = task.pause_reason ?? ''; const takeover: CardAction = { label: '我来接管', kind: 'secondary', onClick: onTakeover, disabled: pending }; if (kind === 'confirm') { return ( onAnswer('确认提交') }, { label: '取消,不提交', kind: 'danger', disabled: pending, onClick: () => onAnswer('取消,不要提交') }, takeover, ]} /> ); } if (kind === 'blocker-self') { return ( onAnswer('是,先去办') }, { label: '否,先结束', kind: 'text', disabled: pending, onClick: () => onAnswer('否') }, ]} /> ); } if (kind === 'blocker-other') { return ( onAnswer('已处理,请继续') }, { label: '先结束', kind: 'text', disabled: pending, onClick: () => onAnswer('取消') }, ]} /> ); } return ; } export function ResultCard({ task, onRetry }: { task: Task; onRetry: () => void }) { const summary = task.artifacts.summary ?? task.reply ?? ''; if (task.status === 'completed' || task.status === 'submitted') { const extras = Object.entries(task.artifacts).filter(([key, value]) => !key.startsWith('summary') && key !== 'tracking' && typeof value !== 'object'); return ( {extras.length > 0 && (
{extras.map(([key, value]) =>
{key}
{String(value)}
)}
)} {task.status === 'submitted' && (

我会定时回查审批状态,有结果时告诉你。也可以在下方点「立即回查」。

)}
); } if (task.status === 'failed') { return ( ); } if (task.status === 'blocked') { return ( ); } if (task.status === 'rejected') { return ; } return null; } export function TakeoverCard({ onDone }: { onDone: () => void }) { return ( ); } export function UserInputHint({ onTakeover, onDismiss }: { onTakeover: () => void; onDismiss: () => void }) { return ( ); }