a tool to help your Letta AI agents navigate bluesky
at main 1.9 kB view raw
1import { 2 agentContext, 3 claimTaskThread, 4 releaseTaskThread, 5 isAgentAwake, 6} from "../utils/agentContext.ts"; 7import { getNow, msFrom, msRandomOffset } from "../utils/time.ts"; 8import { messageAgent } from "../utils/messageAgent.ts"; 9import { wakePrompt } from "../prompts/wakePrompt.ts"; 10import { msUntilDailyWindow } from "../utils/time.ts"; 11 12export const sendWakeMessage = async () => { 13 if (!claimTaskThread()) { 14 const newDelay = msFrom.minutes(2); 15 console.log( 16 `🔹 ${agentContext.agentBskyName} is busy, sending wake message again in ${ 17 (newDelay / 1000) / 60 18 } minutes…`, 19 ); 20 // session is busy, try to check notifications in 2 minutes. 21 setTimeout(sendWakeMessage, newDelay); 22 return; 23 } 24 25 if (!agentContext.sleepEnabled) { 26 console.log( 27 `🔹 ${agentContext.agentBskyName} is not enabled for sleep mode. Opting out of wake messaging…`, 28 ); 29 releaseTaskThread(); 30 return; 31 } 32 33 const now = getNow(); 34 35 if (isAgentAwake(now.hour)) { 36 console.log(`🔹 attempting to wake up ${agentContext.agentBskyName}`); 37 } else { 38 const delay = msUntilDailyWindow( 39 agentContext.wakeTime, 40 0, 41 msFrom.minutes(30), 42 ); 43 setTimeout(sendWakeMessage, delay); 44 console.log( 45 `🔹 ${agentContext.agentBskyName} should still be asleep. Scheduling wake message for ${ 46 (delay / 1000 / 60 / 60).toFixed(2) 47 } hours from now…`, 48 ); 49 releaseTaskThread(); 50 return; 51 } 52 53 try { 54 await messageAgent(wakePrompt); 55 } catch (error) { 56 console.error("error in sendWakeMessage: ", error); 57 } finally { 58 console.log("🔹 wake attempt processed, scheduling next wake prompt…"); 59 setTimeout( 60 sendWakeMessage, 61 msUntilDailyWindow(agentContext.wakeTime, 0, msFrom.minutes(30)), 62 ); 63 console.log("🔹 exiting wake process"); 64 releaseTaskThread(); 65 } 66};