| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import type { AppState } from '../state/AppState.js'
- /**
- * Parse `@agent-name message` syntax for direct team member messaging.
- */
- export function parseDirectMemberMessage(input: string): {
- recipientName: string
- message: string
- } | null {
- const match = input.match(/^@([\w-]+)\s+(.+)$/s)
- if (!match) return null
- const [, recipientName, message] = match
- if (!recipientName || !message) return null
- const trimmedMessage = message.trim()
- if (!trimmedMessage) return null
- return { recipientName, message: trimmedMessage }
- }
- export type DirectMessageResult =
- | { success: true; recipientName: string }
- | {
- success: false
- error: 'no_team_context' | 'unknown_recipient'
- recipientName?: string
- }
- type WriteToMailboxFn = (
- recipientName: string,
- message: { from: string; text: string; timestamp: string },
- teamName: string,
- ) => Promise<void>
- /**
- * Send a direct message to a team member, bypassing the model.
- */
- export async function sendDirectMemberMessage(
- recipientName: string,
- message: string,
- teamContext: AppState['teamContext'],
- writeToMailbox?: WriteToMailboxFn,
- ): Promise<DirectMessageResult> {
- if (!teamContext || !writeToMailbox) {
- return { success: false, error: 'no_team_context' }
- }
- // Find team member by name
- const member = Object.values(teamContext.teammates ?? {}).find(
- t => t.name === recipientName,
- )
- if (!member) {
- return { success: false, error: 'unknown_recipient', recipientName }
- }
- await writeToMailbox(
- recipientName,
- {
- from: 'user',
- text: message,
- timestamp: new Date().toISOString(),
- },
- teamContext.teamName,
- )
- return { success: true, recipientName }
- }
|