a tool to help your Letta AI agents navigate bluesky
1/**
2 * Helper functions for determining agent sleep/wake status
3 * These functions handle both normal schedules and cross-midnight schedules
4 */
5
6/**
7 * Core logic: Determines if agent should be asleep at given hour
8 */
9export const isAgentAsleep = (
10 hour: number,
11 wakeTime: number,
12 sleepTime: number,
13): boolean => {
14 // Edge case: if wake == sleep, agent has zero awake time (always asleep)
15 if (wakeTime === sleepTime) {
16 return true;
17 }
18
19 // If sleepTime > wakeTime: normal same-day schedule (e.g., wake=8, sleep=22)
20 // Agent is asleep from sleepTime until midnight, OR from midnight until wakeTime
21 if (sleepTime > wakeTime) {
22 return hour >= sleepTime || hour < wakeTime;
23 }
24
25 // If sleepTime < wakeTime: schedule crosses midnight (e.g., wake=9, sleep=2)
26 // Agent is asleep from sleepTime until wakeTime (same day)
27 return hour >= sleepTime && hour < wakeTime;
28};
29
30/**
31 * Semantic wrapper: Determines if agent should be awake at given hour
32 * Simply the inverse of isAgentAsleep
33 */
34export const isAgentAwake = (
35 hour: number,
36 wakeTime: number,
37 sleepTime: number,
38): boolean => {
39 return !isAgentAsleep(hour, wakeTime, sleepTime);
40};