+6
.env.example
+6
.env.example
+12
deno.json
+12
deno.json
···
···
1
+
{
2
+
"tasks": {
3
+
"setup": "deno run --allow-read --allow-write setup.ts",
4
+
"dev": "deno run --allow-net --allow-env --env --watch server.ts",
5
+
"start": "deno run --allow-net --allow-env --env server.ts"
6
+
},
7
+
"imports": {
8
+
"@std/assert": "jsr:@std/assert@1",
9
+
"@atproto/api": "npm:@atproto/api",
10
+
"@letta-ai/letta-client": "npm:@letta-ai/letta-client"
11
+
}
12
+
}
+335
deno.lock
+335
deno.lock
···
···
1
+
{
2
+
"version": "5",
3
+
"specifiers": {
4
+
"npm:@atproto/api@*": "0.17.2",
5
+
"npm:@letta-ai/letta-client@*": "0.0.68664"
6
+
},
7
+
"npm": {
8
+
"@atproto/api@0.17.2": {
9
+
"integrity": "sha512-luRY9YPaRQFpm3v7a1bTOaekQ/KPCG3gb0jVyaOtfMXDSfIZJh9lr9MtmGPdEp7AvfE8urkngZ+V/p8Ial3z2g==",
10
+
"dependencies": [
11
+
"@atproto/common-web",
12
+
"@atproto/lexicon",
13
+
"@atproto/syntax",
14
+
"@atproto/xrpc",
15
+
"await-lock",
16
+
"multiformats",
17
+
"tlds",
18
+
"zod"
19
+
]
20
+
},
21
+
"@atproto/common-web@0.4.3": {
22
+
"integrity": "sha512-nRDINmSe4VycJzPo6fP/hEltBcULFxt9Kw7fQk6405FyAWZiTluYHlXOnU7GkQfeUK44OENG1qFTBcmCJ7e8pg==",
23
+
"dependencies": [
24
+
"graphemer",
25
+
"multiformats",
26
+
"uint8arrays",
27
+
"zod"
28
+
]
29
+
},
30
+
"@atproto/lexicon@0.5.1": {
31
+
"integrity": "sha512-y8AEtYmfgVl4fqFxqXAeGvhesiGkxiy3CWoJIfsFDDdTlZUC8DFnZrYhcqkIop3OlCkkljvpSJi1hbeC1tbi8A==",
32
+
"dependencies": [
33
+
"@atproto/common-web",
34
+
"@atproto/syntax",
35
+
"iso-datestring-validator",
36
+
"multiformats",
37
+
"zod"
38
+
]
39
+
},
40
+
"@atproto/syntax@0.4.1": {
41
+
"integrity": "sha512-CJdImtLAiFO+0z3BWTtxwk6aY5w4t8orHTMVJgkf++QRJWTxPbIFko/0hrkADB7n2EruDxDSeAgfUGehpH6ngw=="
42
+
},
43
+
"@atproto/xrpc@0.7.5": {
44
+
"integrity": "sha512-MUYNn5d2hv8yVegRL0ccHvTHAVj5JSnW07bkbiaz96UH45lvYNRVwt44z+yYVnb0/mvBzyD3/ZQ55TRGt7fHkA==",
45
+
"dependencies": [
46
+
"@atproto/lexicon",
47
+
"zod"
48
+
]
49
+
},
50
+
"@letta-ai/letta-client@0.0.68664": {
51
+
"integrity": "sha512-/0g8dV3IIX0WfnOUDY1EEgnhj/747m73zhTmbLhldEMjCk/RzKyjvUeZbHiukiGoCf/u1nxRgcRUn66MKMYB2A==",
52
+
"dependencies": [
53
+
"form-data",
54
+
"form-data-encoder",
55
+
"formdata-node",
56
+
"node-fetch",
57
+
"qs",
58
+
"readable-stream",
59
+
"url-join"
60
+
]
61
+
},
62
+
"abort-controller@3.0.0": {
63
+
"integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
64
+
"dependencies": [
65
+
"event-target-shim"
66
+
]
67
+
},
68
+
"asynckit@0.4.0": {
69
+
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
70
+
},
71
+
"await-lock@2.2.2": {
72
+
"integrity": "sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw=="
73
+
},
74
+
"base64-js@1.5.1": {
75
+
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
76
+
},
77
+
"buffer@6.0.3": {
78
+
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
79
+
"dependencies": [
80
+
"base64-js",
81
+
"ieee754"
82
+
]
83
+
},
84
+
"call-bind-apply-helpers@1.0.2": {
85
+
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
86
+
"dependencies": [
87
+
"es-errors",
88
+
"function-bind"
89
+
]
90
+
},
91
+
"call-bound@1.0.4": {
92
+
"integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
93
+
"dependencies": [
94
+
"call-bind-apply-helpers",
95
+
"get-intrinsic"
96
+
]
97
+
},
98
+
"combined-stream@1.0.8": {
99
+
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
100
+
"dependencies": [
101
+
"delayed-stream"
102
+
]
103
+
},
104
+
"delayed-stream@1.0.0": {
105
+
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
106
+
},
107
+
"dunder-proto@1.0.1": {
108
+
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
109
+
"dependencies": [
110
+
"call-bind-apply-helpers",
111
+
"es-errors",
112
+
"gopd"
113
+
]
114
+
},
115
+
"es-define-property@1.0.1": {
116
+
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="
117
+
},
118
+
"es-errors@1.3.0": {
119
+
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
120
+
},
121
+
"es-object-atoms@1.1.1": {
122
+
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
123
+
"dependencies": [
124
+
"es-errors"
125
+
]
126
+
},
127
+
"es-set-tostringtag@2.1.0": {
128
+
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
129
+
"dependencies": [
130
+
"es-errors",
131
+
"get-intrinsic",
132
+
"has-tostringtag",
133
+
"hasown"
134
+
]
135
+
},
136
+
"event-target-shim@5.0.1": {
137
+
"integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
138
+
},
139
+
"events@3.3.0": {
140
+
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
141
+
},
142
+
"form-data-encoder@4.1.0": {
143
+
"integrity": "sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw=="
144
+
},
145
+
"form-data@4.0.4": {
146
+
"integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
147
+
"dependencies": [
148
+
"asynckit",
149
+
"combined-stream",
150
+
"es-set-tostringtag",
151
+
"hasown",
152
+
"mime-types"
153
+
]
154
+
},
155
+
"formdata-node@6.0.3": {
156
+
"integrity": "sha512-8e1++BCiTzUno9v5IZ2J6bv4RU+3UKDmqWUQD0MIMVCd9AdhWkO1gw57oo1mNEX1dMq2EGI+FbWz4B92pscSQg=="
157
+
},
158
+
"function-bind@1.1.2": {
159
+
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
160
+
},
161
+
"get-intrinsic@1.3.0": {
162
+
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
163
+
"dependencies": [
164
+
"call-bind-apply-helpers",
165
+
"es-define-property",
166
+
"es-errors",
167
+
"es-object-atoms",
168
+
"function-bind",
169
+
"get-proto",
170
+
"gopd",
171
+
"has-symbols",
172
+
"hasown",
173
+
"math-intrinsics"
174
+
]
175
+
},
176
+
"get-proto@1.0.1": {
177
+
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
178
+
"dependencies": [
179
+
"dunder-proto",
180
+
"es-object-atoms"
181
+
]
182
+
},
183
+
"gopd@1.2.0": {
184
+
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="
185
+
},
186
+
"graphemer@1.4.0": {
187
+
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
188
+
},
189
+
"has-symbols@1.1.0": {
190
+
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="
191
+
},
192
+
"has-tostringtag@1.0.2": {
193
+
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
194
+
"dependencies": [
195
+
"has-symbols"
196
+
]
197
+
},
198
+
"hasown@2.0.2": {
199
+
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
200
+
"dependencies": [
201
+
"function-bind"
202
+
]
203
+
},
204
+
"ieee754@1.2.1": {
205
+
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
206
+
},
207
+
"iso-datestring-validator@2.2.2": {
208
+
"integrity": "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA=="
209
+
},
210
+
"math-intrinsics@1.1.0": {
211
+
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="
212
+
},
213
+
"mime-db@1.52.0": {
214
+
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
215
+
},
216
+
"mime-types@2.1.35": {
217
+
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
218
+
"dependencies": [
219
+
"mime-db"
220
+
]
221
+
},
222
+
"multiformats@9.9.0": {
223
+
"integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg=="
224
+
},
225
+
"node-fetch@2.7.0": {
226
+
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
227
+
"dependencies": [
228
+
"whatwg-url"
229
+
]
230
+
},
231
+
"object-inspect@1.13.4": {
232
+
"integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="
233
+
},
234
+
"process@0.11.10": {
235
+
"integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="
236
+
},
237
+
"qs@6.14.0": {
238
+
"integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
239
+
"dependencies": [
240
+
"side-channel"
241
+
]
242
+
},
243
+
"readable-stream@4.7.0": {
244
+
"integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==",
245
+
"dependencies": [
246
+
"abort-controller",
247
+
"buffer",
248
+
"events",
249
+
"process",
250
+
"string_decoder"
251
+
]
252
+
},
253
+
"safe-buffer@5.2.1": {
254
+
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
255
+
},
256
+
"side-channel-list@1.0.0": {
257
+
"integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
258
+
"dependencies": [
259
+
"es-errors",
260
+
"object-inspect"
261
+
]
262
+
},
263
+
"side-channel-map@1.0.1": {
264
+
"integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
265
+
"dependencies": [
266
+
"call-bound",
267
+
"es-errors",
268
+
"get-intrinsic",
269
+
"object-inspect"
270
+
]
271
+
},
272
+
"side-channel-weakmap@1.0.2": {
273
+
"integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
274
+
"dependencies": [
275
+
"call-bound",
276
+
"es-errors",
277
+
"get-intrinsic",
278
+
"object-inspect",
279
+
"side-channel-map"
280
+
]
281
+
},
282
+
"side-channel@1.1.0": {
283
+
"integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
284
+
"dependencies": [
285
+
"es-errors",
286
+
"object-inspect",
287
+
"side-channel-list",
288
+
"side-channel-map",
289
+
"side-channel-weakmap"
290
+
]
291
+
},
292
+
"string_decoder@1.3.0": {
293
+
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
294
+
"dependencies": [
295
+
"safe-buffer"
296
+
]
297
+
},
298
+
"tlds@1.260.0": {
299
+
"integrity": "sha512-78+28EWBhCEE7qlyaHA9OR3IPvbCLiDh3Ckla593TksfFc9vfTsgvH7eS+dr3o9qr31gwGbogcI16yN91PoRjQ==",
300
+
"bin": true
301
+
},
302
+
"tr46@0.0.3": {
303
+
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
304
+
},
305
+
"uint8arrays@3.0.0": {
306
+
"integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==",
307
+
"dependencies": [
308
+
"multiformats"
309
+
]
310
+
},
311
+
"url-join@4.0.1": {
312
+
"integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA=="
313
+
},
314
+
"webidl-conversions@3.0.1": {
315
+
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
316
+
},
317
+
"whatwg-url@5.0.0": {
318
+
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
319
+
"dependencies": [
320
+
"tr46",
321
+
"webidl-conversions"
322
+
]
323
+
},
324
+
"zod@3.25.76": {
325
+
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="
326
+
}
327
+
},
328
+
"workspace": {
329
+
"dependencies": [
330
+
"jsr:@std/assert@1",
331
+
"npm:@atproto/api@*",
332
+
"npm:@letta-ai/letta-client@*"
333
+
]
334
+
}
335
+
}
+10
setup.ts
+10
setup.ts
···
···
1
+
// setup.ts
2
+
const envExample = await Deno.readTextFile(".env.example");
3
+
4
+
try {
5
+
await Deno.stat(".env");
6
+
console.log("✓ .env already exists, skipping...");
7
+
} catch {
8
+
await Deno.writeTextFile(".env", envExample);
9
+
console.log("✓ Created .env from .env.example");
10
+
}