import type { MessageDescriptor } from "@lingui/core"; import { msg } from "@lingui/core/macro"; import type { VoicePhase } from "../components/voice/VoiceStage"; import type { PersonaArchetype } from "./bot-persona"; type CopyTable = Record< PersonaArchetype, { phase: Record; idlePrompt: MessageDescriptor; thinking: readonly MessageDescriptor[]; } >; const COPY: CopyTable = { "cto-executive": { phase: { listening: msg`Listening — say what you need.`, thinking: msg`Considering the trade-offs…`, speaking: msg`Speaking with intent…`, }, idlePrompt: msg`Tell me what matters. I'll move.`, thinking: [ msg`Polishing the details…`, msg`Checking the architecture…`, msg`Making it simpler…`, msg`One more look before I answer…`, ], }, "chief-operator": { phase: { listening: msg`I'm listening — what's the priority?`, thinking: msg`Aligning the pieces…`, speaking: msg`Here's the readout — I'll push back if something's off.`, }, idlePrompt: msg`What's on your mind? I'll route it — and tell you when I disagree.`, thinking: [ msg`Checking who needs to be in the loop…`, msg`Sequencing next steps…`, msg`Clearing blockers…`, ], }, builder: { phase: { listening: msg`Listening — describe the bot you want.`, thinking: msg`Sketching the blueprint…`, speaking: msg`Walking you through it…`, }, idlePrompt: msg`What should we build together?`, thinking: [msg`Drafting the spec…`, msg`Choosing the right shape…`], }, curator: { phase: { listening: msg`Listening — what's the story?`, thinking: msg`Editing for clarity…`, speaking: msg`Sharing the draft…`, }, idlePrompt: msg`What should go live?`, thinking: [msg`Tightening the copy…`, msg`Checking the layout…`], }, "inbox-work": { phase: { listening: msg`Work channel open — go ahead.`, thinking: msg`Triage in progress…`, speaking: msg`Here's what I found…`, }, idlePrompt: msg`What's the work item?`, thinking: [msg`Sorting priorities…`, msg`Matching the right room…`], }, "inbox-life": { phase: { listening: msg`Life channel — I'm here.`, thinking: msg`Making space for this…`, speaking: msg`Gently — here's my take…`, }, idlePrompt: msg`What's personal today?`, thinking: [msg`Taking a breath before I reply…`, msg`Finding the right tone…`], }, "home-steward": { phase: { listening: msg`Listening — home or devices?`, thinking: msg`Checking the house…`, speaking: msg`Reporting from home…`, }, idlePrompt: msg`What should I adjust at home?`, thinking: [msg`Polling devices…`, msg`Verifying the scene…`], }, quant: { phase: { listening: msg`Listening — signal or risk?`, thinking: msg`Running the numbers…`, speaking: msg`Here's the read…`, }, idlePrompt: msg`What should I measure?`, thinking: [msg`Scanning exposure…`, msg`Stress-testing the book…`], }, engineer: { phase: { listening: msg`Listening — what's broken or slow?`, thinking: msg`Tracing the path…`, speaking: msg`Here's what I see in the logs…`, }, idlePrompt: msg`Point me at the problem.`, thinking: [msg`Reading the stack trace…`, msg`Checking dependencies…`], }, specialist: { phase: { listening: msg`In my lane — happy to geek out or just execute, your call.`, thinking: msg`Working in my lane…`, speaking: msg`Here's what I found — I'll say if I think you're wrong.`, }, idlePrompt: msg`Ask within my scope — I won't just yes you.`, thinking: [msg`Staying in my specialty…`, msg`Checking who else should help…`], }, }; export function personaPhaseLabel( archetype: PersonaArchetype, phase: VoicePhase, ): MessageDescriptor { return COPY[archetype].phase[phase]; } export function personaIdlePrompt(archetype: PersonaArchetype): MessageDescriptor { return COPY[archetype].idlePrompt; } export function personaThinkingLines(archetype: PersonaArchetype): readonly MessageDescriptor[] { return COPY[archetype].thinking; } export function personaWorkshopIdlePrompt(): MessageDescriptor { return msg`Share what you're imagining — or tell me one thing to refine.`; } export function personaWorkshopAskPrompt(): MessageDescriptor { return msg`What do you think — react or answer in a sentence.`; } /** Shared working-state lines for transcript + ActiveBotGlyph. */ export function personaWorkingLines( archetype: PersonaArchetype, botName: string, ): readonly MessageDescriptor[] { switch (archetype) { case "cto-executive": return [ msg`${botName} polishes the details…`, msg`${botName} checks the architecture…`, msg`${botName} makes it simpler…`, msg`${botName} reviews the pixels…`, ]; case "quant": return [ msg`${botName} scans the book…`, msg`${botName} stress-tests exposure…`, msg`${botName} watches the tape…`, ]; case "engineer": return [ msg`${botName} reads the logs…`, msg`${botName} traces the failure…`, msg`${botName} runs the checks…`, ]; case "chief-operator": return [ msg`${botName} aligns the team…`, msg`${botName} clears the path…`, msg`${botName} sequences the work…`, ]; default: return [msg`${botName} is working…`, msg`${botName} is on it…`]; } }