π File detail
utils/directMemberMessage.ts
π§© .tsπ 70 linesπΎ 1,715 bytesπ text
β Back to All Filesπ― Use case
This file lives under βutils/β, which covers cross-cutting helpers (shell, tempfiles, settings, messages, process input, β¦). On the API surface it exposes parseDirectMemberMessage, DirectMessageResult, and sendDirectMemberMessage β mainly functions, hooks, or classes. It composes internal code from state (relative imports).
Generated from folder role, exports, dependency roots, and inline comments β not hand-reviewed for every path.
π§ Inline summary
import type { AppState } from '../state/AppState.js' /** * Parse `@agent-name message` syntax for direct team member messaging. */
π€ Exports (heuristic)
parseDirectMemberMessageDirectMessageResultsendDirectMemberMessage
π₯οΈ Source preview
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 }
}