@letta-ai/letta-code 0.34.20 → 0.34.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-presets.js +3 -3
- package/dist/agent-presets.js.map +1 -1
- package/dist/app-server-client.cjs +2 -2
- package/dist/app-server-client.cjs.map +3 -3
- package/dist/app-server-client.js +2 -2
- package/dist/app-server-client.js.map +3 -3
- package/dist/mcp-client.js +2 -2
- package/dist/mcp-client.js.map +1 -1
- package/dist/mcp-oauth.js +2 -2
- package/dist/mcp-oauth.js.map +1 -1
- package/dist/types/agent/client-skills.d.ts +4 -0
- package/dist/types/agent/client-skills.d.ts.map +1 -1
- package/dist/types/agent/context.d.ts +5 -0
- package/dist/types/agent/context.d.ts.map +1 -1
- package/dist/types/agent/message.d.ts.map +1 -1
- package/dist/types/backend/api/unified-mcp.d.ts.map +1 -1
- package/dist/types/providers/chatgpt-provider-auth.d.ts +79 -0
- package/dist/types/providers/chatgpt-provider-auth.d.ts.map +1 -0
- package/dist/types/providers/chatgpt-usage-service.d.ts +3 -9
- package/dist/types/providers/chatgpt-usage-service.d.ts.map +1 -1
- package/dist/types/runtime-context.d.ts +2 -0
- package/dist/types/runtime-context.d.ts.map +1 -1
- package/dist/types/tools/toolset.d.ts +1 -0
- package/dist/types/tools/toolset.d.ts.map +1 -1
- package/dist/types/types/app-server-info.d.ts +2 -0
- package/dist/types/types/app-server-info.d.ts.map +1 -1
- package/dist/types/types/chatgpt-usage-protocol.d.ts +103 -0
- package/dist/types/types/chatgpt-usage-protocol.d.ts.map +1 -0
- package/dist/types/types/protocol_v2.d.ts +4 -58
- package/dist/types/types/protocol_v2.d.ts.map +1 -1
- package/dist/types/types/runtime-start-protocol.d.ts +6 -0
- package/dist/types/types/runtime-start-protocol.d.ts.map +1 -1
- package/dist/types/websocket/listener/mcp-originator-scope.d.ts +9 -0
- package/dist/types/websocket/listener/mcp-originator-scope.d.ts.map +1 -0
- package/dist/types/websocket/listener/queue.d.ts +2 -1
- package/dist/types/websocket/listener/queue.d.ts.map +1 -1
- package/dist/types/websocket/listener/runtime.d.ts.map +1 -1
- package/dist/types/websocket/listener/types.d.ts +10 -4
- package/dist/types/websocket/listener/types.d.ts.map +1 -1
- package/letta.js +2988 -2074
- package/npm-shrinkwrap.json +124 -120
- package/package.json +2 -2
- package/scripts/source-file-size-baseline.json +4 -5
- package/skills/working-across-computers/SKILL.md +0 -6
- package/skills/working-across-computers/references/connect-a-computer-for-remote-access.md +6 -23
- package/skills/editing-letta-code-desktop-preferences/SKILL.md +0 -77
- package/skills/working-across-computers/assets/allow-remote-access-from-desktop.png +0 -0
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@letta-ai/letta-code",
|
|
3
|
-
"version": "0.34.
|
|
3
|
+
"version": "0.34.22",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"packages": {
|
|
6
6
|
"node_modules/@alcalzone/ansi-tokenize": {
|
|
@@ -61,15 +61,15 @@
|
|
|
61
61
|
}
|
|
62
62
|
},
|
|
63
63
|
"node_modules/@aws-sdk/core": {
|
|
64
|
-
"version": "3.978.
|
|
65
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.978.
|
|
66
|
-
"integrity": "sha512-
|
|
64
|
+
"version": "3.978.5",
|
|
65
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.978.5.tgz",
|
|
66
|
+
"integrity": "sha512-ruI0AWqcrfL20XDS6SwZIJFPOBZ6N0ADa9nLzWlBhxk1aoUjbUX3JkTR9vEmk7o35XpAHi68ahZ4T6RE2U9XyA==",
|
|
67
67
|
"license": "Apache-2.0",
|
|
68
68
|
"dependencies": {
|
|
69
|
-
"@aws-sdk/types": "^3.
|
|
69
|
+
"@aws-sdk/types": "^3.975.0",
|
|
70
70
|
"@aws-sdk/xml-builder": "^3.972.41",
|
|
71
71
|
"@aws/lambda-invoke-store": "^0.3.0",
|
|
72
|
-
"@smithy/core": "^3.36.
|
|
72
|
+
"@smithy/core": "^3.36.1",
|
|
73
73
|
"@smithy/signature-v4": "^5.7.4",
|
|
74
74
|
"@smithy/types": "^4.19.0",
|
|
75
75
|
"bowser": "^2.11.0",
|
|
@@ -80,14 +80,14 @@
|
|
|
80
80
|
}
|
|
81
81
|
},
|
|
82
82
|
"node_modules/@aws-sdk/credential-provider-env": {
|
|
83
|
-
"version": "3.972.
|
|
84
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.
|
|
85
|
-
"integrity": "sha512-
|
|
83
|
+
"version": "3.972.76",
|
|
84
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.76.tgz",
|
|
85
|
+
"integrity": "sha512-YxmL1Ar7bV9ZkJvtv+lj+MF6le76NnZnbmgySyZuxpZaCv0/1lZ3KxKy6RIj1h9ui2hWnVjZxbmTMeO0y/NrQA==",
|
|
86
86
|
"license": "Apache-2.0",
|
|
87
87
|
"dependencies": {
|
|
88
|
-
"@aws-sdk/core": "^3.978.
|
|
89
|
-
"@aws-sdk/types": "^3.
|
|
90
|
-
"@smithy/core": "^3.36.
|
|
88
|
+
"@aws-sdk/core": "^3.978.5",
|
|
89
|
+
"@aws-sdk/types": "^3.975.0",
|
|
90
|
+
"@smithy/core": "^3.36.1",
|
|
91
91
|
"@smithy/types": "^4.19.0",
|
|
92
92
|
"tslib": "^2.6.2"
|
|
93
93
|
},
|
|
@@ -96,14 +96,14 @@
|
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"node_modules/@aws-sdk/credential-provider-http": {
|
|
99
|
-
"version": "3.972.
|
|
100
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.
|
|
101
|
-
"integrity": "sha512-
|
|
99
|
+
"version": "3.972.78",
|
|
100
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.78.tgz",
|
|
101
|
+
"integrity": "sha512-3VHknDRngoebsaqyT1iR75b5cBT2zfEtODK6yYmYltljkK1HEAQLs2FEd1IpWqAeOYdMGaG9wikngWLTufY7RA==",
|
|
102
102
|
"license": "Apache-2.0",
|
|
103
103
|
"dependencies": {
|
|
104
|
-
"@aws-sdk/core": "^3.978.
|
|
105
|
-
"@aws-sdk/types": "^3.
|
|
106
|
-
"@smithy/core": "^3.36.
|
|
104
|
+
"@aws-sdk/core": "^3.978.5",
|
|
105
|
+
"@aws-sdk/types": "^3.975.0",
|
|
106
|
+
"@smithy/core": "^3.36.1",
|
|
107
107
|
"@smithy/fetch-http-handler": "^5.8.0",
|
|
108
108
|
"@smithy/node-http-handler": "^4.12.1",
|
|
109
109
|
"@smithy/types": "^4.19.0",
|
|
@@ -114,21 +114,21 @@
|
|
|
114
114
|
}
|
|
115
115
|
},
|
|
116
116
|
"node_modules/@aws-sdk/credential-provider-ini": {
|
|
117
|
-
"version": "3.973.
|
|
118
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.
|
|
119
|
-
"integrity": "sha512-
|
|
117
|
+
"version": "3.973.21",
|
|
118
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.21.tgz",
|
|
119
|
+
"integrity": "sha512-aLx9hbCX6mGAyv4ZZd8UagJ4RASHVJw6BFDSIyuKmLkqNL6H47EjBPK6qaJ4B5TDV6mc+vMa0SJFYyo4mkvVQg==",
|
|
120
120
|
"license": "Apache-2.0",
|
|
121
121
|
"dependencies": {
|
|
122
|
-
"@aws-sdk/core": "^3.978.
|
|
123
|
-
"@aws-sdk/credential-provider-env": "^3.972.
|
|
124
|
-
"@aws-sdk/credential-provider-http": "^3.972.
|
|
125
|
-
"@aws-sdk/credential-provider-login": "^3.972.
|
|
126
|
-
"@aws-sdk/credential-provider-process": "^3.972.
|
|
127
|
-
"@aws-sdk/credential-provider-sso": "^3.973.
|
|
128
|
-
"@aws-sdk/credential-provider-web-identity": "^3.972.
|
|
129
|
-
"@aws-sdk/nested-clients": "^3.997.
|
|
130
|
-
"@aws-sdk/types": "^3.
|
|
131
|
-
"@smithy/core": "^3.36.
|
|
122
|
+
"@aws-sdk/core": "^3.978.5",
|
|
123
|
+
"@aws-sdk/credential-provider-env": "^3.972.76",
|
|
124
|
+
"@aws-sdk/credential-provider-http": "^3.972.78",
|
|
125
|
+
"@aws-sdk/credential-provider-login": "^3.972.83",
|
|
126
|
+
"@aws-sdk/credential-provider-process": "^3.972.76",
|
|
127
|
+
"@aws-sdk/credential-provider-sso": "^3.973.20",
|
|
128
|
+
"@aws-sdk/credential-provider-web-identity": "^3.972.82",
|
|
129
|
+
"@aws-sdk/nested-clients": "^3.997.50",
|
|
130
|
+
"@aws-sdk/types": "^3.975.0",
|
|
131
|
+
"@smithy/core": "^3.36.1",
|
|
132
132
|
"@smithy/credential-provider-imds": "^4.5.2",
|
|
133
133
|
"@smithy/types": "^4.19.0",
|
|
134
134
|
"tslib": "^2.6.2"
|
|
@@ -138,15 +138,15 @@
|
|
|
138
138
|
}
|
|
139
139
|
},
|
|
140
140
|
"node_modules/@aws-sdk/credential-provider-login": {
|
|
141
|
-
"version": "3.972.
|
|
142
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.
|
|
143
|
-
"integrity": "sha512-
|
|
141
|
+
"version": "3.972.83",
|
|
142
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.83.tgz",
|
|
143
|
+
"integrity": "sha512-9bJU6FjRacF4FK/QHf8Dyxhur7B1grRj8C1Yh4IkpoFW2exQflPdCv0VrbemLW9ZctLNle+AE7TETs9KNvuLYg==",
|
|
144
144
|
"license": "Apache-2.0",
|
|
145
145
|
"dependencies": {
|
|
146
|
-
"@aws-sdk/core": "^3.978.
|
|
147
|
-
"@aws-sdk/nested-clients": "^3.997.
|
|
148
|
-
"@aws-sdk/types": "^3.
|
|
149
|
-
"@smithy/core": "^3.36.
|
|
146
|
+
"@aws-sdk/core": "^3.978.5",
|
|
147
|
+
"@aws-sdk/nested-clients": "^3.997.50",
|
|
148
|
+
"@aws-sdk/types": "^3.975.0",
|
|
149
|
+
"@smithy/core": "^3.36.1",
|
|
150
150
|
"@smithy/types": "^4.19.0",
|
|
151
151
|
"tslib": "^2.6.2"
|
|
152
152
|
},
|
|
@@ -155,19 +155,19 @@
|
|
|
155
155
|
}
|
|
156
156
|
},
|
|
157
157
|
"node_modules/@aws-sdk/credential-provider-node": {
|
|
158
|
-
"version": "3.972.
|
|
159
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.
|
|
160
|
-
"integrity": "sha512-
|
|
158
|
+
"version": "3.972.88",
|
|
159
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.88.tgz",
|
|
160
|
+
"integrity": "sha512-AG0KID5qhQPzrFkh5b0Cws1Amytvzo0L0Xj6hMgJXEwD6ZXAqninDhSNAWJiN5zU4YVVZnuidnqwPwYJ04IamA==",
|
|
161
161
|
"license": "Apache-2.0",
|
|
162
162
|
"dependencies": {
|
|
163
|
-
"@aws-sdk/credential-provider-env": "^3.972.
|
|
164
|
-
"@aws-sdk/credential-provider-http": "^3.972.
|
|
165
|
-
"@aws-sdk/credential-provider-ini": "^3.973.
|
|
166
|
-
"@aws-sdk/credential-provider-process": "^3.972.
|
|
167
|
-
"@aws-sdk/credential-provider-sso": "^3.973.
|
|
168
|
-
"@aws-sdk/credential-provider-web-identity": "^3.972.
|
|
169
|
-
"@aws-sdk/types": "^3.
|
|
170
|
-
"@smithy/core": "^3.36.
|
|
163
|
+
"@aws-sdk/credential-provider-env": "^3.972.76",
|
|
164
|
+
"@aws-sdk/credential-provider-http": "^3.972.78",
|
|
165
|
+
"@aws-sdk/credential-provider-ini": "^3.973.21",
|
|
166
|
+
"@aws-sdk/credential-provider-process": "^3.972.76",
|
|
167
|
+
"@aws-sdk/credential-provider-sso": "^3.973.20",
|
|
168
|
+
"@aws-sdk/credential-provider-web-identity": "^3.972.82",
|
|
169
|
+
"@aws-sdk/types": "^3.975.0",
|
|
170
|
+
"@smithy/core": "^3.36.1",
|
|
171
171
|
"@smithy/credential-provider-imds": "^4.5.2",
|
|
172
172
|
"@smithy/types": "^4.19.0",
|
|
173
173
|
"tslib": "^2.6.2"
|
|
@@ -177,14 +177,14 @@
|
|
|
177
177
|
}
|
|
178
178
|
},
|
|
179
179
|
"node_modules/@aws-sdk/credential-provider-process": {
|
|
180
|
-
"version": "3.972.
|
|
181
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.
|
|
182
|
-
"integrity": "sha512-
|
|
180
|
+
"version": "3.972.76",
|
|
181
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.76.tgz",
|
|
182
|
+
"integrity": "sha512-pdhKFTXv1zPYhh92MTlp0jVbLWvUEV9v+rziuEkoskGGQ2iJskxHTO38nA8UAbT/N4IM3n8OZJ9rIY5IBO15/A==",
|
|
183
183
|
"license": "Apache-2.0",
|
|
184
184
|
"dependencies": {
|
|
185
|
-
"@aws-sdk/core": "^3.978.
|
|
186
|
-
"@aws-sdk/types": "^3.
|
|
187
|
-
"@smithy/core": "^3.36.
|
|
185
|
+
"@aws-sdk/core": "^3.978.5",
|
|
186
|
+
"@aws-sdk/types": "^3.975.0",
|
|
187
|
+
"@smithy/core": "^3.36.1",
|
|
188
188
|
"@smithy/types": "^4.19.0",
|
|
189
189
|
"tslib": "^2.6.2"
|
|
190
190
|
},
|
|
@@ -193,16 +193,16 @@
|
|
|
193
193
|
}
|
|
194
194
|
},
|
|
195
195
|
"node_modules/@aws-sdk/credential-provider-sso": {
|
|
196
|
-
"version": "3.973.
|
|
197
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.
|
|
198
|
-
"integrity": "sha512-
|
|
196
|
+
"version": "3.973.20",
|
|
197
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.20.tgz",
|
|
198
|
+
"integrity": "sha512-DlxrAB3MnjNLx/da7b89W+3DyJQYso/q7Ns15MsST2IV2nkAYQOYTUCaffNSjgrpMP99Dm2mV2jxzcbyF94ZfA==",
|
|
199
199
|
"license": "Apache-2.0",
|
|
200
200
|
"dependencies": {
|
|
201
|
-
"@aws-sdk/core": "^3.978.
|
|
202
|
-
"@aws-sdk/nested-clients": "^3.997.
|
|
203
|
-
"@aws-sdk/token-providers": "3.
|
|
204
|
-
"@aws-sdk/types": "^3.
|
|
205
|
-
"@smithy/core": "^3.36.
|
|
201
|
+
"@aws-sdk/core": "^3.978.5",
|
|
202
|
+
"@aws-sdk/nested-clients": "^3.997.50",
|
|
203
|
+
"@aws-sdk/token-providers": "3.1155.0",
|
|
204
|
+
"@aws-sdk/types": "^3.975.0",
|
|
205
|
+
"@smithy/core": "^3.36.1",
|
|
206
206
|
"@smithy/types": "^4.19.0",
|
|
207
207
|
"tslib": "^2.6.2"
|
|
208
208
|
},
|
|
@@ -211,15 +211,15 @@
|
|
|
211
211
|
}
|
|
212
212
|
},
|
|
213
213
|
"node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers": {
|
|
214
|
-
"version": "3.
|
|
215
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.
|
|
216
|
-
"integrity": "sha512-
|
|
214
|
+
"version": "3.1155.0",
|
|
215
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1155.0.tgz",
|
|
216
|
+
"integrity": "sha512-iIcQnYLhWuq9qOLQbIWFrxF3PF0svVeZvHnUS4DUnO4zUFmFHIyGyjqrntXG+e/5PUgfavV0pYfDIKHxTzN2LA==",
|
|
217
217
|
"license": "Apache-2.0",
|
|
218
218
|
"dependencies": {
|
|
219
|
-
"@aws-sdk/core": "^3.978.
|
|
220
|
-
"@aws-sdk/nested-clients": "^3.997.
|
|
221
|
-
"@aws-sdk/types": "^3.
|
|
222
|
-
"@smithy/core": "^3.36.
|
|
219
|
+
"@aws-sdk/core": "^3.978.5",
|
|
220
|
+
"@aws-sdk/nested-clients": "^3.997.50",
|
|
221
|
+
"@aws-sdk/types": "^3.975.0",
|
|
222
|
+
"@smithy/core": "^3.36.1",
|
|
223
223
|
"@smithy/types": "^4.19.0",
|
|
224
224
|
"tslib": "^2.6.2"
|
|
225
225
|
},
|
|
@@ -228,15 +228,15 @@
|
|
|
228
228
|
}
|
|
229
229
|
},
|
|
230
230
|
"node_modules/@aws-sdk/credential-provider-web-identity": {
|
|
231
|
-
"version": "3.972.
|
|
232
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.
|
|
233
|
-
"integrity": "sha512-
|
|
231
|
+
"version": "3.972.82",
|
|
232
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.82.tgz",
|
|
233
|
+
"integrity": "sha512-LUo46IqPTJ4xKBsrLuoaxiv/D2GTBCcFDMD1y3jKIqPR/p7Rw14RJFZ0iRWftqZtyLPQX9JMGnSi3mBu4y/pNA==",
|
|
234
234
|
"license": "Apache-2.0",
|
|
235
235
|
"dependencies": {
|
|
236
|
-
"@aws-sdk/core": "^3.978.
|
|
237
|
-
"@aws-sdk/nested-clients": "^3.997.
|
|
238
|
-
"@aws-sdk/types": "^3.
|
|
239
|
-
"@smithy/core": "^3.36.
|
|
236
|
+
"@aws-sdk/core": "^3.978.5",
|
|
237
|
+
"@aws-sdk/nested-clients": "^3.997.50",
|
|
238
|
+
"@aws-sdk/types": "^3.975.0",
|
|
239
|
+
"@smithy/core": "^3.36.1",
|
|
240
240
|
"@smithy/types": "^4.19.0",
|
|
241
241
|
"tslib": "^2.6.2"
|
|
242
242
|
},
|
|
@@ -245,13 +245,13 @@
|
|
|
245
245
|
}
|
|
246
246
|
},
|
|
247
247
|
"node_modules/@aws-sdk/eventstream-handler-node": {
|
|
248
|
-
"version": "3.972.
|
|
249
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-handler-node/-/eventstream-handler-node-3.972.
|
|
250
|
-
"integrity": "sha512-
|
|
248
|
+
"version": "3.972.38",
|
|
249
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-handler-node/-/eventstream-handler-node-3.972.38.tgz",
|
|
250
|
+
"integrity": "sha512-K7vPKNstDlavHFZgbmcFdJOFIyowsevjddycRziRBbtXH/D9z+i9juCnH17liwSX9T8fJiDQzlEYkRtxkR+1vA==",
|
|
251
251
|
"license": "Apache-2.0",
|
|
252
252
|
"dependencies": {
|
|
253
|
-
"@aws-sdk/types": "^3.
|
|
254
|
-
"@smithy/core": "^3.36.
|
|
253
|
+
"@aws-sdk/types": "^3.975.0",
|
|
254
|
+
"@smithy/core": "^3.36.1",
|
|
255
255
|
"@smithy/types": "^4.19.0",
|
|
256
256
|
"tslib": "^2.6.2"
|
|
257
257
|
},
|
|
@@ -260,13 +260,13 @@
|
|
|
260
260
|
}
|
|
261
261
|
},
|
|
262
262
|
"node_modules/@aws-sdk/middleware-eventstream": {
|
|
263
|
-
"version": "3.972.
|
|
264
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.972.
|
|
265
|
-
"integrity": "sha512-
|
|
263
|
+
"version": "3.972.33",
|
|
264
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.972.33.tgz",
|
|
265
|
+
"integrity": "sha512-8QUt39D/dk5tdV7rLvIfMMI/ilQff4zth7mkMKpVOLM+M5AQ9W3nPxFVuHQANevmVWi4T5MlxqfKV4Q2drYeBA==",
|
|
266
266
|
"license": "Apache-2.0",
|
|
267
267
|
"dependencies": {
|
|
268
|
-
"@aws-sdk/types": "^3.
|
|
269
|
-
"@smithy/core": "^3.36.
|
|
268
|
+
"@aws-sdk/types": "^3.975.0",
|
|
269
|
+
"@smithy/core": "^3.36.1",
|
|
270
270
|
"@smithy/types": "^4.19.0",
|
|
271
271
|
"tslib": "^2.6.2"
|
|
272
272
|
},
|
|
@@ -275,14 +275,14 @@
|
|
|
275
275
|
}
|
|
276
276
|
},
|
|
277
277
|
"node_modules/@aws-sdk/middleware-websocket": {
|
|
278
|
-
"version": "3.972.
|
|
279
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-websocket/-/middleware-websocket-3.972.
|
|
280
|
-
"integrity": "sha512
|
|
278
|
+
"version": "3.972.58",
|
|
279
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-websocket/-/middleware-websocket-3.972.58.tgz",
|
|
280
|
+
"integrity": "sha512-/BvocdloKozx/zFr4benH+9J1ywB/2dYFHPWNUdo0CBCe00gTm0HPflOq8MH6cuCTbnywSrscGq0/LheN59teQ==",
|
|
281
281
|
"license": "Apache-2.0",
|
|
282
282
|
"dependencies": {
|
|
283
|
-
"@aws-sdk/core": "^3.978.
|
|
284
|
-
"@aws-sdk/types": "^3.
|
|
285
|
-
"@smithy/core": "^3.36.
|
|
283
|
+
"@aws-sdk/core": "^3.978.5",
|
|
284
|
+
"@aws-sdk/types": "^3.975.0",
|
|
285
|
+
"@smithy/core": "^3.36.1",
|
|
286
286
|
"@smithy/fetch-http-handler": "^5.8.0",
|
|
287
287
|
"@smithy/signature-v4": "^5.7.4",
|
|
288
288
|
"@smithy/types": "^4.19.0",
|
|
@@ -293,15 +293,15 @@
|
|
|
293
293
|
}
|
|
294
294
|
},
|
|
295
295
|
"node_modules/@aws-sdk/nested-clients": {
|
|
296
|
-
"version": "3.997.
|
|
297
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.
|
|
298
|
-
"integrity": "sha512-
|
|
296
|
+
"version": "3.997.50",
|
|
297
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.50.tgz",
|
|
298
|
+
"integrity": "sha512-nKb8qu4QsnpZTq/6JIXc72mzuzfh7BK4sUQkpQznPec2z4W7Ob2xYkcM4i5e1yGTBnbJVeFv/0sf3jcz85hclA==",
|
|
299
299
|
"license": "Apache-2.0",
|
|
300
300
|
"dependencies": {
|
|
301
|
-
"@aws-sdk/core": "^3.978.
|
|
302
|
-
"@aws-sdk/signature-v4-multi-region": "^3.996.
|
|
303
|
-
"@aws-sdk/types": "^3.
|
|
304
|
-
"@smithy/core": "^3.36.
|
|
301
|
+
"@aws-sdk/core": "^3.978.5",
|
|
302
|
+
"@aws-sdk/signature-v4-multi-region": "^3.996.49",
|
|
303
|
+
"@aws-sdk/types": "^3.975.0",
|
|
304
|
+
"@smithy/core": "^3.36.1",
|
|
305
305
|
"@smithy/fetch-http-handler": "^5.8.0",
|
|
306
306
|
"@smithy/node-http-handler": "^4.12.1",
|
|
307
307
|
"@smithy/types": "^4.19.0",
|
|
@@ -312,12 +312,12 @@
|
|
|
312
312
|
}
|
|
313
313
|
},
|
|
314
314
|
"node_modules/@aws-sdk/signature-v4-multi-region": {
|
|
315
|
-
"version": "3.996.
|
|
316
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.
|
|
317
|
-
"integrity": "sha512-
|
|
315
|
+
"version": "3.996.49",
|
|
316
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.49.tgz",
|
|
317
|
+
"integrity": "sha512-nvuAZNRrRRVCiARRKsYlQ0VnXiEQiq7vXPH+UA+LSo+kN3Djl9eo/V2r0udkw85PnsNshmv2Em1clld5M3j67w==",
|
|
318
318
|
"license": "Apache-2.0",
|
|
319
319
|
"dependencies": {
|
|
320
|
-
"@aws-sdk/types": "^3.
|
|
320
|
+
"@aws-sdk/types": "^3.975.0",
|
|
321
321
|
"@smithy/signature-v4": "^5.7.4",
|
|
322
322
|
"@smithy/types": "^4.19.0",
|
|
323
323
|
"tslib": "^2.6.2"
|
|
@@ -344,9 +344,9 @@
|
|
|
344
344
|
}
|
|
345
345
|
},
|
|
346
346
|
"node_modules/@aws-sdk/types": {
|
|
347
|
-
"version": "3.
|
|
348
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.
|
|
349
|
-
"integrity": "sha512-
|
|
347
|
+
"version": "3.975.0",
|
|
348
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.975.0.tgz",
|
|
349
|
+
"integrity": "sha512-WQlhs6juByzWOzj5fwxOx0mPJaEqMcG/sDpl3Id61B3XhKE63xY+0QWcnG+sWR/sCfprmreyUo1lM7IKZmHMzw==",
|
|
350
350
|
"license": "Apache-2.0",
|
|
351
351
|
"dependencies": {
|
|
352
352
|
"@smithy/types": "^4.19.0",
|
|
@@ -2064,9 +2064,9 @@
|
|
|
2064
2064
|
"license": "MIT"
|
|
2065
2065
|
},
|
|
2066
2066
|
"node_modules/@smithy/core": {
|
|
2067
|
-
"version": "3.36.
|
|
2068
|
-
"resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.36.
|
|
2069
|
-
"integrity": "sha512-
|
|
2067
|
+
"version": "3.36.2",
|
|
2068
|
+
"resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.36.2.tgz",
|
|
2069
|
+
"integrity": "sha512-oRw0rB9QSUiCZfEs23G5F4Af+b2rQt1lItIICWu5IejFNd+uPM8SWqiKLMpQ6bX1Q7slsLbjuoE2niErFtkVPQ==",
|
|
2070
2070
|
"license": "Apache-2.0",
|
|
2071
2071
|
"dependencies": {
|
|
2072
2072
|
"@smithy/types": "^4.19.0",
|
|
@@ -2517,18 +2517,18 @@
|
|
|
2517
2517
|
}
|
|
2518
2518
|
},
|
|
2519
2519
|
"node_modules/body-parser": {
|
|
2520
|
-
"version": "2.
|
|
2521
|
-
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.
|
|
2522
|
-
"integrity": "sha512-
|
|
2520
|
+
"version": "2.4.0",
|
|
2521
|
+
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.4.0.tgz",
|
|
2522
|
+
"integrity": "sha512-Ifk1KcLrxaGt1occQagQNFNNOqRt1LFuehEnHHzB8Z6cRgIxRU1TBaiIsUiCdA+gy5PL7Y1IX31DNKkRmxtXjQ==",
|
|
2523
2523
|
"license": "MIT",
|
|
2524
2524
|
"dependencies": {
|
|
2525
2525
|
"bytes": "^3.1.2",
|
|
2526
|
-
"content-type": "^2.
|
|
2526
|
+
"content-type": "^2.1.0",
|
|
2527
2527
|
"debug": "^4.4.3",
|
|
2528
2528
|
"http-errors": "^2.0.1",
|
|
2529
|
-
"iconv-lite": "^0.7.
|
|
2529
|
+
"iconv-lite": "^0.7.3",
|
|
2530
2530
|
"on-finished": "^2.4.1",
|
|
2531
|
-
"qs": "^6.
|
|
2531
|
+
"qs": "^6.16.1",
|
|
2532
2532
|
"raw-body": "^3.0.2",
|
|
2533
2533
|
"type-is": "^2.1.0"
|
|
2534
2534
|
},
|
|
@@ -4216,15 +4216,19 @@
|
|
|
4216
4216
|
}
|
|
4217
4217
|
},
|
|
4218
4218
|
"node_modules/on-finished": {
|
|
4219
|
-
"version": "2.4.
|
|
4220
|
-
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.
|
|
4221
|
-
"integrity": "sha512-
|
|
4219
|
+
"version": "2.4.2",
|
|
4220
|
+
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.2.tgz",
|
|
4221
|
+
"integrity": "sha512-ATWUv387i+nLD49EiDoOft5scf32Vsdz3ktrQJG9bi7jRFmaXTssvyvj1EmeKVVgvesbqUtvQQvaS2TpTukAZQ==",
|
|
4222
4222
|
"license": "MIT",
|
|
4223
4223
|
"dependencies": {
|
|
4224
4224
|
"ee-first": "1.1.1"
|
|
4225
4225
|
},
|
|
4226
4226
|
"engines": {
|
|
4227
4227
|
"node": ">= 0.8"
|
|
4228
|
+
},
|
|
4229
|
+
"funding": {
|
|
4230
|
+
"type": "opencollective",
|
|
4231
|
+
"url": "https://opencollective.com/express"
|
|
4228
4232
|
}
|
|
4229
4233
|
},
|
|
4230
4234
|
"node_modules/once": {
|
|
@@ -5452,7 +5456,7 @@
|
|
|
5452
5456
|
},
|
|
5453
5457
|
"": {
|
|
5454
5458
|
"name": "@letta-ai/letta-code",
|
|
5455
|
-
"version": "0.34.
|
|
5459
|
+
"version": "0.34.22",
|
|
5456
5460
|
"dependencies": {
|
|
5457
5461
|
"@earendil-works/pi-ai": "^0.99.1",
|
|
5458
5462
|
"@janhapke/sharp-electron": "0.35.3-electron.1",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@letta-ai/letta-code",
|
|
3
|
-
"version": "0.34.
|
|
3
|
+
"version": "0.34.22",
|
|
4
4
|
"lettaStartupLogProtocol": 1,
|
|
5
5
|
"description": "Letta Code is a CLI tool for interacting with stateful Letta agents from the terminal.",
|
|
6
6
|
"type": "module",
|
|
@@ -275,5 +275,5 @@
|
|
|
275
275
|
},
|
|
276
276
|
"lettaLifecycleProtocol": 1,
|
|
277
277
|
"lettaRuntimeGraphProtocol": 1,
|
|
278
|
-
"lettaRuntimeGraphSha512": "sha512-
|
|
278
|
+
"lettaRuntimeGraphSha512": "sha512-xHwgmxBsCCiYY3o9bJl2DPx84chNPq1OsLFGac23DBEoU+h6hGCcX7rZezQxutCYhG/yFzjQ65L3pZ5j6BzNbg=="
|
|
279
279
|
}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"src/cli/components/AgentSelector.tsx": 1104,
|
|
14
14
|
"src/cli/components/InputRich.tsx": 2124,
|
|
15
15
|
"src/cli/components/ModelSelector.tsx": 1259,
|
|
16
|
-
"src/cli/components/ProviderSelector.tsx":
|
|
16
|
+
"src/cli/components/ProviderSelector.tsx": 1552,
|
|
17
17
|
"src/cli/helpers/accumulator.ts": 1587,
|
|
18
18
|
"src/cli/helpers/reflection-transcript.ts": 1926,
|
|
19
19
|
"src/cli/mods/local-mod-loader.test.ts": 1043,
|
|
@@ -30,16 +30,15 @@
|
|
|
30
30
|
"src/mods/package-registry.ts": 1033,
|
|
31
31
|
"src/permissions/read-only-shell.test.ts": 1253,
|
|
32
32
|
"src/permissions/read-only-shell.ts": 1969,
|
|
33
|
-
"src/providers/chatgpt-usage-service.ts": 1112,
|
|
34
33
|
"src/settings-manager.test.ts": 1635,
|
|
35
34
|
"src/settings-manager.ts": 2092,
|
|
36
35
|
"src/tools/manager.ts": 2609,
|
|
37
36
|
"src/tools/tool-execution-context.test.ts": 1092,
|
|
38
|
-
"src/types/protocol_v2.ts":
|
|
39
|
-
"src/websocket/listen-client-concurrency.test.ts":
|
|
37
|
+
"src/types/protocol_v2.ts": 2411,
|
|
38
|
+
"src/websocket/listen-client-concurrency.test.ts": 2554,
|
|
40
39
|
"src/websocket/listen-client-protocol.test.ts": 5664,
|
|
41
40
|
"src/websocket/listener/commands/memory.ts": 1114,
|
|
42
41
|
"src/websocket/listener/file-commands.ts": 1045,
|
|
43
|
-
"src/websocket/listener/protocol-inbound.ts":
|
|
42
|
+
"src/websocket/listener/protocol-inbound.ts": 2047,
|
|
44
43
|
"src/websocket/listener/protocol-outbound.ts": 1001
|
|
45
44
|
}
|
|
@@ -64,12 +64,6 @@ Have a remote subagent download any needed files and verify completion before mo
|
|
|
64
64
|
letta teleport <computer>
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
-
With exactly one online Desktop, open with Remote Access enabled, you can use the shortcut:
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
letta teleport local
|
|
71
|
-
```
|
|
72
|
-
|
|
73
67
|
## Transfer files to or from Cloud
|
|
74
68
|
|
|
75
69
|
Run upload where the local file exists; run download where the local copy should be saved.
|
|
@@ -4,7 +4,7 @@ Use this guide when the user is connecting a computer for the first time, no sui
|
|
|
4
4
|
|
|
5
5
|
Explain that the user must complete setup **on the computer they want to connect**, signed into the same Letta account they use on chat.letta.com. Remote access lets agents run commands and access files on that machine, subject to tool approvals. Local-only / “Skip login” mode is not sufficient.
|
|
6
6
|
|
|
7
|
-
When the user is talking to you through an organization's Slack workspace, use the connect token path: the computer has to be registered in that organization, and the user has no Letta browser session to approve it from. For chat.letta.com
|
|
7
|
+
When the user is talking to you through an organization's Slack workspace, use the connect token path: the computer has to be registered in that organization, and the user has no Letta browser session to approve it from. For chat.letta.com users, use the CLI server path for any computer, including a personal laptop, a terminal-only machine, or a VM. Give the relevant steps below rather than only saying the computer is unavailable. Do not run registration commands in the Cloud sandbox as a substitute for connecting the user's machine.
|
|
8
8
|
|
|
9
9
|
## Option 1: Connect token (Slack organization)
|
|
10
10
|
|
|
@@ -16,7 +16,7 @@ curl -sS -X POST "$LETTA_BASE_URL/v1/environments/connect-token" \
|
|
|
16
16
|
-H "Content-Type: application/json" -d '{}'
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
The response is `{ "deviceCode": "...", "organizationId": "...", "expiresIn": 900 }`. A 403 means this sandbox key does not resolve to an owner; tell the user and fall back to Option
|
|
19
|
+
The response is `{ "deviceCode": "...", "organizationId": "...", "expiresIn": 900 }`. A 403 means this sandbox key does not resolve to an owner; tell the user and fall back to Option 2.
|
|
20
20
|
|
|
21
21
|
Ask the user to install [Node.js 22.19 or newer](https://nodejs.org/en/download) if they do not have it, then run this **on the computer they want to connect**, filling in both values from the response:
|
|
22
22
|
|
|
@@ -29,24 +29,7 @@ Tell them the code works once and expires in 15 minutes; if it is used or expire
|
|
|
29
29
|
|
|
30
30
|
The command signs in as the owner. Send it only to that person: a DM, or the thread where the owner asked, never a broadcast in a shared channel. Do not post the command anywhere a second person can run it first.
|
|
31
31
|
|
|
32
|
-
## Option 2:
|
|
33
|
-
|
|
34
|
-
Ask the user to:
|
|
35
|
-
|
|
36
|
-
1. [Download and install Letta Desktop](https://docs.letta.com/quickstart/) for their operating system.
|
|
37
|
-
2. Open the app and sign in to their Letta account.
|
|
38
|
-
3. Open **Preferences → General** and enable **Allow remote access**.
|
|
39
|
-
4. Set the computer's name in the field beneath the toggle.
|
|
40
|
-
5. Keep Desktop running and the computer awake and connected to the internet.
|
|
41
|
-
6. Open chat.letta.com and select the named computer in the computer picker to run a conversation there.
|
|
42
|
-
|
|
43
|
-
Show the bundled screenshot when explaining the toggle and name field:
|
|
44
|
-
|
|
45
|
-

|
|
46
|
-
|
|
47
|
-
Resolve `assets/allow-remote-access-from-desktop.png` relative to this skill's directory. In chat or Desktop, use the resolved absolute local path in the Markdown image you send, not this reference file's relative path. The screenshot is from the original teleportation skill; surrounding settings may differ in newer Desktop versions.
|
|
48
|
-
|
|
49
|
-
## Option 3: CLI server (browser sign-in)
|
|
32
|
+
## Option 2: CLI server (browser sign-in)
|
|
50
33
|
|
|
51
34
|
Ask the user to install [Node.js 22.19 or newer](https://nodejs.org/en/download), then run these commands in a terminal **on the target computer**:
|
|
52
35
|
|
|
@@ -57,7 +40,7 @@ letta server --computer-name "work-laptop"
|
|
|
57
40
|
|
|
58
41
|
If not already authenticated, the server prints a login URL. Ask the user to open it in a browser and authorize with their Letta account. Do not ask them to paste credentials into chat.
|
|
59
42
|
|
|
60
|
-
Keep the server process running and the computer awake and online. The named computer will appear in the picker on chat.letta.com
|
|
43
|
+
Keep the server process running and the computer awake and online. The named computer will appear in the picker on chat.letta.com. For an always-on VM, use a service manager and persist the CLI's authentication state across restarts.
|
|
61
44
|
|
|
62
45
|
No inbound ports, public IP, or reverse proxy are required: the server connects outward to Letta Cloud. Use plain `letta server`, not `letta server --listen`; `--listen` starts the separate App Server interface for direct application connections.
|
|
63
46
|
|
|
@@ -74,8 +57,8 @@ Use the returned computer name or ID for remote delegation or teleportation. Do
|
|
|
74
57
|
If the computer is still missing or unreachable, ask the user to check that:
|
|
75
58
|
|
|
76
59
|
- The computer is awake and connected to the internet.
|
|
77
|
-
-
|
|
78
|
-
- The
|
|
60
|
+
- `letta server` is still running.
|
|
61
|
+
- The CLI is signed into the same Letta account as the web session.
|
|
79
62
|
|
|
80
63
|
Re-list after the user changes the relevant state, rather than repeatedly retrying an unavailable target. If it is listed but an operation still fails, use the concrete error to diagnose authentication, connectivity, or version compatibility; do not assume it needs reinstalling or bypass access controls.
|
|
81
64
|
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: editing-letta-code-desktop-preferences
|
|
3
|
-
description: Edits Letta Code Desktop (LCD) preferences by safely reading and updating ~/.letta/desktop_preferences.json. Use only when the user asks to change current Desktop/LCD settings such as theme, default working directory, remote access preference, or remote environment name via the preferences JSON.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Editing Letta Code Desktop Preferences
|
|
7
|
-
|
|
8
|
-
Use this skill only to edit the active Letta Code Desktop preferences JSON file. Do not use it for Desktop product-code changes, Electron IPC work, UI changes, or general Letta Cloud Desktop implementation tasks.
|
|
9
|
-
|
|
10
|
-
## Preferences file
|
|
11
|
-
|
|
12
|
-
The Desktop preferences file is:
|
|
13
|
-
|
|
14
|
-
```text
|
|
15
|
-
~/.letta/desktop_preferences.json
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
User-editable preference keys:
|
|
19
|
-
|
|
20
|
-
- `defaultWorkingDirectory`: default folder for new local sessions.
|
|
21
|
-
- `theme`: `auto`, `light`, or `dark`.
|
|
22
|
-
- `allowRemoteAccess`: boolean for whether remote access should be enabled in preferences.
|
|
23
|
-
- `runInBackground`: boolean for whether Desktop stays alive in tray/menu bar when all windows close.
|
|
24
|
-
- `startAtLogin`: boolean for whether Desktop starts hidden at login.
|
|
25
|
-
- `remoteEnvName`: environment name shown in the Letta Cloud environment picker for the cloud listener.
|
|
26
|
-
- `localBackendDirectory`: directory containing local backend agents, conversations, and memory.
|
|
27
|
-
- `allowLocalAgentsWhenSignedIn`: boolean for whether signed-in Desktop sessions can see local/offline agents.
|
|
28
|
-
|
|
29
|
-
System-managed keys (do not edit directly):
|
|
30
|
-
- `artifactsByAgent`: per-agent artifacts panel state, written by Desktop UI.
|
|
31
|
-
- `debugPanelEnabled`: developer debug panel, controlled via app menus.
|
|
32
|
-
- `remoteAppServerEnabled`: Remote App Server toggle, applied at startup.
|
|
33
|
-
- `remoteAppServerUrl`: Remote App Server URL, configured via preferences UI.
|
|
34
|
-
|
|
35
|
-
## Workflow
|
|
36
|
-
|
|
37
|
-
1. Read the existing JSON first.
|
|
38
|
-
2. Preserve unknown keys.
|
|
39
|
-
3. Merge only the requested preference updates.
|
|
40
|
-
4. Write pretty JSON with a trailing newline.
|
|
41
|
-
5. Do not edit token, provider, secret, agent, conversation, memory, or unrelated state files.
|
|
42
|
-
6. Changes apply live within ~100ms via Desktop's file watcher; if Desktop is not running, changes take effect on next startup.
|
|
43
|
-
|
|
44
|
-
## Safe edit command
|
|
45
|
-
|
|
46
|
-
Use a merge-style edit like this, changing only the requested keys:
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
node - <<'NODE'
|
|
50
|
-
const fs = require('fs');
|
|
51
|
-
const os = require('os');
|
|
52
|
-
const path = require('path');
|
|
53
|
-
|
|
54
|
-
const file = path.join(os.homedir(), '.letta', 'desktop_preferences.json');
|
|
55
|
-
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
56
|
-
|
|
57
|
-
const current = fs.existsSync(file)
|
|
58
|
-
? JSON.parse(fs.readFileSync(file, 'utf8'))
|
|
59
|
-
: {};
|
|
60
|
-
|
|
61
|
-
const next = {
|
|
62
|
-
...current,
|
|
63
|
-
// Example update. Replace this with the user's requested setting.
|
|
64
|
-
theme: 'dark',
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
fs.writeFileSync(file, JSON.stringify(next, null, 2) + '\n');
|
|
68
|
-
NODE
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
## Validation
|
|
72
|
-
|
|
73
|
-
After editing, read the file back or parse it to confirm valid JSON:
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
node -e "JSON.parse(require('fs').readFileSync(require('os').homedir() + '/.letta/desktop_preferences.json', 'utf8')); console.log('desktop_preferences.json is valid')"
|
|
77
|
-
```
|