Prompt blocks for the orchestrator live in src/core/orchestrator/prompt-blocks.ts and expose several pure rendering functions that are safe to concatenate unconditionally into a prompt.[1]
currentTimeBlock formats the user's local time using Intl.DateTimeFormat with dateStyle: "full" and timeStyle: "short", and returns an empty string — not null — when the timezone is invalid, making it safe to unconditionally concatenate into a prompt.[1]
renderConversationRoster caps displayed members at 20 (ROSTER_CAP = 20) and renders each entry as - DisplayName (principalId).[1] When the member list is truncated, an overflow suffix "…and N more in this conversation." is appended; an empty member list returns null.[1]
deliveryMenu renders a ## Where scheduled tasks post prompt block listing candidate delivery destinations, marking the default with "(default — where we're talking now)" and noting that destinationKey values must come from that list.[1] Passing scope:"personal" routes cron output to the user's personal DM instead of the default destination.[1]
Schedule entries are rendered with three label formats: cron <expr> [<timezone> | default timezone] for cron expressions, every Nm (rounded to whole minutes, minimum 1) for interval schedules, and once at <ISO-date> for one-shot schedules.[1]
Sources