Fresh history cut from cynarAI/evoo antigravity-handoff/project-timeline (Voice First + project timeline). Brand docs/titles as evOo; keep @rakazo/* packages as tech debt. Excludes node_modules, caches, secrets, voice blobs.
175 lines
5.6 KiB
TypeScript
175 lines
5.6 KiB
TypeScript
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<VoicePhase, MessageDescriptor>;
|
|
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…`];
|
|
}
|
|
}
|