a tool to help your Letta AI agents navigate bluesky
1import type { AppBskyNotificationListNotifications } from "@atproto/api";
2import {
3 allAgentTools,
4 configAgentTools,
5 requiredAgentTools,
6 validAutomationLevels,
7 validNotifTypes,
8} from "./const.ts";
9export type Notification = AppBskyNotificationListNotifications.Notification;
10
11export type AutomationLevel = typeof validAutomationLevels[number];
12export type ResponsiblePartyType = "person" | "organization";
13
14export type notifType = typeof validNotifTypes[number];
15
16export type configAgentTool = typeof configAgentTools[number];
17export type requiredAgentTool = typeof requiredAgentTools[number];
18export type allAgentTool = typeof allAgentTools[number];
19
20export type agentContextObject = {
21 // state
22 busy: boolean;
23 sleeping: boolean;
24 checkCount: number;
25 reflectionCount: number;
26 processingCount: number;
27 proactiveCount: number;
28 likeCount: number;
29 repostCount: number;
30 followCount: number;
31 mentionCount: number;
32 replyCount: number;
33 quoteCount: number;
34 // required manual variables
35 lettaProjectIdentifier: string;
36 agentBskyHandle: string;
37 agentBskyName: string;
38 responsiblePartyName: string; // what person or org is responsible for this bot?
39 responsiblePartyContact: string; // email or url for people to contact about bot
40 // required variables with fallbacks
41 agentBskyServiceUrl: string;
42 automationLevel: AutomationLevel;
43 supportedNotifTypes: notifType[];
44 supportedTools: allAgentTool[];
45 notifDelayMinimum: number;
46 notifDelayMaximum: number;
47 notifDelayMultiplier: number;
48 reflectionDelayMinimum: number;
49 reflectionDelayMaximum: number;
50 proactiveDelayMinimum: number;
51 proactiveDelayMaximum: number;
52 wakeTime: number;
53 sleepTime: number;
54 timeZone: string;
55 responsiblePartyType: string; // person / organization
56 preserveAgentMemory: boolean; // if true, mount won't update existing memory blocks
57 // set automatically
58 agentBskyDID: string;
59 reflectionEnabled: boolean;
60 proactiveEnabled: boolean;
61 sleepEnabled: boolean;
62 notifDelayCurrent: number;
63 // optional
64 automationDescription?: string; // short description of what this agent does
65 disclosureUrl?: string; // url to a ToS/Privacy Policy style page
66 responsiblePartyBsky?: string; // handle w/o @ or DID of responsible party
67};
68
69export type AutonomyDeclarationRecord = {
70 $type: "studio.voyager.account.autonomy";
71
72 // How automated is this account?
73 automationLevel?: "human" | "assisted" | "collaborative" | "automated";
74
75 // Is AI involved in content creation?
76 usesGenerativeAI?: boolean;
77
78 // Plain language explanation
79 description?: string; // maxGraphemes: 300
80
81 // Who is accountable for this account?
82 responsibleParty?: {
83 type?: "person" | "organization";
84 name?: string;
85 contact?: string; // email, URL, handle, or DID
86 did?: string; // ATProto DID
87 };
88
89 // Where can someone learn more?
90 disclosureUrl?: string; // URI format
91
92 // When was this declaration created?
93 createdAt: string; // ISO datetime (required)
94};
95
96export type memoryBlock = {
97 label: string;
98 description: string;
99 readOnly: boolean;
100 limit: number;
101 value: string;
102};