hermes-agent/ui-tui/src/lib/billingDialog.ts

37 lines
1.2 KiB
TypeScript

import type { BillingBlock } from '@hermes/shared/billing'
export interface BillingDialogCopy {
cancelLabel: string
confirmLabel: string
detail: string
title: string
}
/**
* Copy for the out-of-credits confirm dialog (the TUI's billing wall). The
* dialog is the actionable layer — the full provider guidance already lands in
* the transcript — so `detail` stays to one concise, non-truncating line and the
* confirm button carries the recovery: Nous → `/topup`, other providers → their
* billing page (or `/model` to switch when we have no URL). Pure + exported so
* the wording is unit-tested without driving the gateway.
*/
export function billingDialogCopy(block: BillingBlock): BillingDialogCopy {
if (block.is_nous) {
return {
cancelLabel: 'Dismiss',
confirmLabel: 'Top up',
detail: 'Your Nous credit balance is exhausted — top up to keep going.',
title: 'Out of Nous credits'
}
}
const label = block.provider_label || 'your provider'
return {
cancelLabel: 'Dismiss',
confirmLabel: block.billing_url ? 'Open billing page' : 'Switch provider',
detail: `${label} reports your credits or billing are exhausted.`,
title: `Out of credits · ${label}`
}
}