Files
agent-workbench/assets/dashboard/src/pages/decision-ui.ts
T

20 lines
1.5 KiB
TypeScript

import type { Decision } from '@/lib/types'
export function decisionStatus(decision: Decision) {
return decision.status === 'decided' || decision.status === 'pending_verification' ? (decision.response ? 'pending_review' : 'open') : decision.status
}
export const decisionLabels = { open: '等待决定', pending_review: '等待检查', accepted: '已接受,待落实', completed: '已完成', needs_reconsideration: '需要重新考虑' }
export type DecisionDraft = { option: string | null; comment: string; revision: number; conflict: boolean; attempt?: { signature: string; key: string }; sending?: boolean }
export type ChatDraft = { text: string; sending: boolean; error: string; attempt?: { text: string; key: string } }
export function writable(decision: Decision) { return ['open', 'needs_reconsideration'].includes(decisionStatus(decision)) }
export function submissionBody(decision: Decision, draft: DecisionDraft) {
const revision = decision.revision
if (!Number.isInteger(revision) || (revision ?? 0) < 1) return null
if (!writable(decision) || draft.sending || draft.conflict || draft.revision !== revision) return null
if (draft.option && !decision.options.some(option => option.id === draft.option)) return null
if (!draft.option && !draft.comment.trim()) return null
return { expected_revision: revision, option_id: draft.option, comment: draft.comment }
}
export function confirmDraft(decision: Decision, draft: DecisionDraft) {
draft.revision = decision.revision ?? 1; draft.conflict = false; draft.option = null; draft.attempt = undefined
}