@letta-ai/letta-code 0.34.26 → 0.34.28

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.
Files changed (117) hide show
  1. package/cursor-worker.js +4 -3
  2. package/dist/agent-presets.js +5 -5
  3. package/dist/agent-presets.js.map +1 -1
  4. package/dist/channels-slack.js +2 -2
  5. package/dist/channels-slack.js.map +3 -3
  6. package/dist/mcp-client.js +2 -2
  7. package/dist/mcp-client.js.map +1 -1
  8. package/dist/mcp-oauth.js +26 -16
  9. package/dist/mcp-oauth.js.map +6 -5
  10. package/dist/memory-confinement.js +109 -51
  11. package/dist/memory-confinement.js.map +9 -8
  12. package/dist/types/agent/mcp-originator-authority-file.d.ts +1 -0
  13. package/dist/types/agent/mcp-originator-authority-file.d.ts.map +1 -1
  14. package/dist/types/agent/memory-filesystem.d.ts +3 -3
  15. package/dist/types/agent/memory-filesystem.d.ts.map +1 -1
  16. package/dist/types/agent/memory-git.d.ts +2 -2
  17. package/dist/types/agent/memory-git.d.ts.map +1 -1
  18. package/dist/types/agent/skills.d.ts +3 -3
  19. package/dist/types/agent/skills.d.ts.map +1 -1
  20. package/dist/types/agent/subagents/index.d.ts +4 -0
  21. package/dist/types/agent/subagents/index.d.ts.map +1 -1
  22. package/dist/types/agent/subagents/subagent-launcher.d.ts.map +1 -1
  23. package/dist/types/backend/api/schedules.d.ts +16 -2
  24. package/dist/types/backend/api/schedules.d.ts.map +1 -1
  25. package/dist/types/channels/slack/attachment-primitives.d.ts.map +1 -1
  26. package/dist/types/channels/types.d.ts +1 -1
  27. package/dist/types/cli/helpers/chunk-log.d.ts.map +1 -1
  28. package/dist/types/cron/cron-file.d.ts.map +1 -1
  29. package/dist/types/hooks/loader.d.ts.map +1 -1
  30. package/dist/types/mods/paths.d.ts +3 -3
  31. package/dist/types/mods/paths.d.ts.map +1 -1
  32. package/dist/types/permissions/agent-memory-prefixes.d.ts.map +1 -1
  33. package/dist/types/permissions/analyzer.d.ts +1 -0
  34. package/dist/types/permissions/analyzer.d.ts.map +1 -1
  35. package/dist/types/permissions/cross-agent-guard.d.ts.map +1 -1
  36. package/dist/types/permissions/loader.d.ts +2 -1
  37. package/dist/types/permissions/loader.d.ts.map +1 -1
  38. package/dist/types/permissions/sandbox-policy.d.ts +9 -7
  39. package/dist/types/permissions/sandbox-policy.d.ts.map +1 -1
  40. package/dist/types/sandbox/bwrap.d.ts +2 -2
  41. package/dist/types/sandbox/bwrap.d.ts.map +1 -1
  42. package/dist/types/sandbox/policy.d.ts +20 -3
  43. package/dist/types/sandbox/policy.d.ts.map +1 -1
  44. package/dist/types/sandbox/seatbelt.d.ts +1 -1
  45. package/dist/types/sandbox/seatbelt.d.ts.map +1 -1
  46. package/dist/types/settings-manager.d.ts +4 -12
  47. package/dist/types/settings-manager.d.ts.map +1 -1
  48. package/dist/types/tools/commit-trailer.d.ts +27 -0
  49. package/dist/types/tools/commit-trailer.d.ts.map +1 -0
  50. package/dist/types/tools/impl/codex-app-server.d.ts +2 -0
  51. package/dist/types/tools/impl/codex-app-server.d.ts.map +1 -1
  52. package/dist/types/tools/impl/cursor-session.d.ts +2 -0
  53. package/dist/types/tools/impl/cursor-session.d.ts.map +1 -1
  54. package/dist/types/tools/impl/cursor-worker.d.ts +4 -1
  55. package/dist/types/tools/impl/cursor-worker.d.ts.map +1 -1
  56. package/dist/types/tools/impl/monitor-script.d.ts +38 -0
  57. package/dist/types/tools/impl/monitor-script.d.ts.map +1 -0
  58. package/dist/types/tools/impl/monitor.d.ts +2 -0
  59. package/dist/types/tools/impl/monitor.d.ts.map +1 -1
  60. package/dist/types/tools/impl/overflow.d.ts +1 -1
  61. package/dist/types/tools/impl/overflow.d.ts.map +1 -1
  62. package/dist/types/tools/impl/process_manager.d.ts +1 -1
  63. package/dist/types/tools/impl/process_manager.d.ts.map +1 -1
  64. package/dist/types/tools/impl/ripgrep-manager.d.ts.map +1 -1
  65. package/dist/types/tools/impl/shell-env.d.ts.map +1 -1
  66. package/dist/types/tools/impl/wake.d.ts.map +1 -1
  67. package/dist/types/tools/manager.d.ts.map +1 -1
  68. package/dist/types/tools/script-tool-scope.d.ts.map +1 -1
  69. package/dist/types/tools/tool-context-retention.d.ts +7 -0
  70. package/dist/types/tools/tool-context-retention.d.ts.map +1 -0
  71. package/dist/types/tools/tool-definitions.d.ts.map +1 -1
  72. package/dist/types/tools/workflow/workflow-engine.d.ts +4 -1
  73. package/dist/types/tools/workflow/workflow-engine.d.ts.map +1 -1
  74. package/dist/types/types/background-process-protocol.d.ts +1 -1
  75. package/dist/types/types/background-process-protocol.d.ts.map +1 -1
  76. package/dist/types/utils/fs.d.ts +5 -1
  77. package/dist/types/utils/fs.d.ts.map +1 -1
  78. package/dist/types/utils/local-backend-paths.d.ts +1 -1
  79. package/dist/types/utils/local-backend-paths.d.ts.map +1 -1
  80. package/dist/types/utils/secrets.d.ts +1 -1
  81. package/dist/types/utils/secrets.d.ts.map +1 -1
  82. package/dist/types/utils/settings-path.d.ts +14 -0
  83. package/dist/types/utils/settings-path.d.ts.map +1 -0
  84. package/dist/types/utils/transcript-paths.d.ts +1 -1
  85. package/dist/types/websocket/listener/constants.d.ts +6 -0
  86. package/dist/types/websocket/listener/constants.d.ts.map +1 -1
  87. package/dist/types/websocket/listener/input-disposition-path.d.ts.map +1 -1
  88. package/dist/types/websocket/listener/interrupted-turn-storage.d.ts.map +1 -1
  89. package/dist/types/websocket/listener/org-credentials.d.ts.map +1 -1
  90. package/dist/types/websocket/listener/remote-settings.d.ts +2 -2
  91. package/dist/types/websocket/listener/remote-settings.d.ts.map +1 -1
  92. package/dist/types/websocket/listener/turn-finished-replay.d.ts +1 -0
  93. package/dist/types/websocket/listener/turn-finished-replay.d.ts.map +1 -1
  94. package/letta.js +2988 -1990
  95. package/npm-shrinkwrap.json +90 -86
  96. package/package.json +3 -2
  97. package/scripts/isolated-unit-tests.json +10 -0
  98. package/scripts/run-api-integration-tests.ts +36 -0
  99. package/scripts/source-file-size-baseline.json +1 -1
  100. package/scripts/test-home-preload.ts +1 -0
  101. package/skills/acquiring-skills/SKILL.md +4 -4
  102. package/skills/creating-mods/SKILL.md +3 -3
  103. package/skills/creating-mods/references/analysis-mode.md +7 -5
  104. package/skills/creating-mods/references/architecture.md +2 -2
  105. package/skills/creating-mods/references/plan-mode.md +12 -11
  106. package/skills/creating-mods/references/providers.md +1 -1
  107. package/skills/creating-skills/scripts/init-skill.ts +4 -2
  108. package/skills/customizing-commands/SKILL.md +3 -3
  109. package/skills/customizing-statusline/SKILL.md +3 -3
  110. package/skills/customizing-statusline/references/api.md +3 -3
  111. package/skills/customizing-statusline/references/migration.md +2 -2
  112. package/skills/initializing-memory/SKILL.md +1 -1
  113. package/skills/self-configuration/SKILL.md +4 -4
  114. package/skills/self-configuration/scripts/add_permission.py +26 -5
  115. package/skills/self-configuration/scripts/show_config.py +17 -2
  116. package/skills/video-generation/SKILL.md +152 -0
  117. package/skills/workflow-authoring/SKILL.md +1 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@letta-ai/letta-code",
3
- "version": "0.34.26",
3
+ "version": "0.34.28",
4
4
  "lockfileVersion": 3,
5
5
  "packages": {
6
6
  "node_modules/@alcalzone/ansi-tokenize": {
@@ -61,13 +61,13 @@
61
61
  }
62
62
  },
63
63
  "node_modules/@aws-sdk/core": {
64
- "version": "3.978.6",
65
- "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.978.6.tgz",
66
- "integrity": "sha512-ykF/MiYoM15dgZwF/WLgjJXVbAK2wU6vjPigeEnOHwyUJ0rdlraO5uekecKNVPkvOnz+oju/5zljViQs1nI1FQ==",
64
+ "version": "3.978.7",
65
+ "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.978.7.tgz",
66
+ "integrity": "sha512-QsYdn5xhvEBzcDC6bgKuvPv87kFtXK/3f5NqKfR+eok5AAn7RaZnkgBKncX+UW3ZMcjSELyAMATN0iqgZmvWVg==",
67
67
  "license": "Apache-2.0",
68
68
  "dependencies": {
69
69
  "@aws-sdk/types": "^3.975.0",
70
- "@aws-sdk/xml-builder": "^3.972.41",
70
+ "@aws-sdk/xml-builder": "^3.972.42",
71
71
  "@aws/lambda-invoke-store": "^0.3.0",
72
72
  "@smithy/core": "^3.37.0",
73
73
  "@smithy/signature-v4": "^5.7.4",
@@ -80,12 +80,12 @@
80
80
  }
81
81
  },
82
82
  "node_modules/@aws-sdk/credential-provider-env": {
83
- "version": "3.972.77",
84
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.77.tgz",
85
- "integrity": "sha512-CN6dQCDo32a8n2gvm2HBeqGV5BNI9noG96nTj5bGO2HWtt0Rucu/A8pcnJIqkzILOHSuilnCk0Do8/7h6SOXhQ==",
83
+ "version": "3.972.78",
84
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.78.tgz",
85
+ "integrity": "sha512-d8V47OxkM/FKe7bVfk5Rga4aNGUaQNk3ip1PFIYhxtup9r8SuNIHLs4HfBAmHT25ZbzowluMHp833UXfFMQbhA==",
86
86
  "license": "Apache-2.0",
87
87
  "dependencies": {
88
- "@aws-sdk/core": "^3.978.6",
88
+ "@aws-sdk/core": "^3.978.7",
89
89
  "@aws-sdk/types": "^3.975.0",
90
90
  "@smithy/core": "^3.37.0",
91
91
  "@smithy/types": "^4.19.0",
@@ -96,12 +96,12 @@
96
96
  }
97
97
  },
98
98
  "node_modules/@aws-sdk/credential-provider-http": {
99
- "version": "3.972.79",
100
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.79.tgz",
101
- "integrity": "sha512-Netsu0nnmvP2HiN1ZFQBeUu+JehQIuubqz+j2kHDgeSE4HDzniCpIZ7RzoWABq+LTcbCi9W03hywifUagoVIWQ==",
99
+ "version": "3.972.80",
100
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.80.tgz",
101
+ "integrity": "sha512-OQqanXiRhnl/wBIJc3TtA7TYmnN7VO0mP95eVoHsLXtPwHz6HeccMpi7cqtnhHw+K7p6VIoAt2IK4M9Ixd9uGg==",
102
102
  "license": "Apache-2.0",
103
103
  "dependencies": {
104
- "@aws-sdk/core": "^3.978.6",
104
+ "@aws-sdk/core": "^3.978.7",
105
105
  "@aws-sdk/types": "^3.975.0",
106
106
  "@smithy/core": "^3.37.0",
107
107
  "@smithy/fetch-http-handler": "^5.8.0",
@@ -128,19 +128,19 @@
128
128
  }
129
129
  },
130
130
  "node_modules/@aws-sdk/credential-provider-ini": {
131
- "version": "3.973.22",
132
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.22.tgz",
133
- "integrity": "sha512-x7/5h58cqOoZR0RWUZC7v/cJOADQR42iSIQkvU+00HVHR4jh8ZpqEgRPGf2zei59iH5qP40lL3bkq49PuWl71g==",
131
+ "version": "3.973.23",
132
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.23.tgz",
133
+ "integrity": "sha512-pTTRK7xoi8NNbrcjVUSd9YdMTUxiWEPfk8newBQCzV+VS5STh5sDPAy3iO29fSqipqNuCpILJcD6wAawxHvG+w==",
134
134
  "license": "Apache-2.0",
135
135
  "dependencies": {
136
- "@aws-sdk/core": "^3.978.6",
137
- "@aws-sdk/credential-provider-env": "^3.972.77",
138
- "@aws-sdk/credential-provider-http": "^3.972.79",
139
- "@aws-sdk/credential-provider-login": "^3.972.84",
140
- "@aws-sdk/credential-provider-process": "^3.972.77",
141
- "@aws-sdk/credential-provider-sso": "^3.973.21",
142
- "@aws-sdk/credential-provider-web-identity": "^3.972.83",
143
- "@aws-sdk/nested-clients": "^3.997.51",
136
+ "@aws-sdk/core": "^3.978.7",
137
+ "@aws-sdk/credential-provider-env": "^3.972.78",
138
+ "@aws-sdk/credential-provider-http": "^3.972.80",
139
+ "@aws-sdk/credential-provider-login": "^3.972.85",
140
+ "@aws-sdk/credential-provider-process": "^3.972.78",
141
+ "@aws-sdk/credential-provider-sso": "^3.973.22",
142
+ "@aws-sdk/credential-provider-web-identity": "^3.972.84",
143
+ "@aws-sdk/nested-clients": "^3.997.52",
144
144
  "@aws-sdk/types": "^3.975.0",
145
145
  "@smithy/core": "^3.37.0",
146
146
  "@smithy/credential-provider-imds": "^4.5.2",
@@ -152,13 +152,13 @@
152
152
  }
153
153
  },
154
154
  "node_modules/@aws-sdk/credential-provider-login": {
155
- "version": "3.972.84",
156
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.84.tgz",
157
- "integrity": "sha512-G9Ty1uIV0laEvEp2KiMbEhsuBAjgaD3KYrwVjAM5VUxpcIuPBqQI5riA7/qzrnSgYiAKQbubbgkwcqCICKCIxg==",
155
+ "version": "3.972.85",
156
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.85.tgz",
157
+ "integrity": "sha512-UHjnTeS+5OBFfRL+BQwCGJPJvnzjhGD6dIwncBJDa+ziyQjPUte9Q0I4BCkybGrHotnyiiluXj13bgelP14J5Q==",
158
158
  "license": "Apache-2.0",
159
159
  "dependencies": {
160
- "@aws-sdk/core": "^3.978.6",
161
- "@aws-sdk/nested-clients": "^3.997.51",
160
+ "@aws-sdk/core": "^3.978.7",
161
+ "@aws-sdk/nested-clients": "^3.997.52",
162
162
  "@aws-sdk/types": "^3.975.0",
163
163
  "@smithy/core": "^3.37.0",
164
164
  "@smithy/types": "^4.19.0",
@@ -169,17 +169,17 @@
169
169
  }
170
170
  },
171
171
  "node_modules/@aws-sdk/credential-provider-node": {
172
- "version": "3.972.89",
173
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.89.tgz",
174
- "integrity": "sha512-O8xj7/sanrnXfFHu/LUujVBiiwn5mknYenU7xt1w6+yvhR1QoDZWXLFh1gLITaFVPtb1jWgEirC+kFNw+//tyw==",
172
+ "version": "3.972.90",
173
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.90.tgz",
174
+ "integrity": "sha512-+McgOQuAUze95AumVmoOBRp++Z8IjsZ0qOASb6+igHdKNzA0FiIf5kbTFaZ64txfd9KTBDpgvlEDGQE41lSq/A==",
175
175
  "license": "Apache-2.0",
176
176
  "dependencies": {
177
- "@aws-sdk/credential-provider-env": "^3.972.77",
178
- "@aws-sdk/credential-provider-http": "^3.972.79",
179
- "@aws-sdk/credential-provider-ini": "^3.973.22",
180
- "@aws-sdk/credential-provider-process": "^3.972.77",
181
- "@aws-sdk/credential-provider-sso": "^3.973.21",
182
- "@aws-sdk/credential-provider-web-identity": "^3.972.83",
177
+ "@aws-sdk/credential-provider-env": "^3.972.78",
178
+ "@aws-sdk/credential-provider-http": "^3.972.80",
179
+ "@aws-sdk/credential-provider-ini": "^3.973.23",
180
+ "@aws-sdk/credential-provider-process": "^3.972.78",
181
+ "@aws-sdk/credential-provider-sso": "^3.973.22",
182
+ "@aws-sdk/credential-provider-web-identity": "^3.972.84",
183
183
  "@aws-sdk/types": "^3.975.0",
184
184
  "@smithy/core": "^3.37.0",
185
185
  "@smithy/credential-provider-imds": "^4.5.2",
@@ -191,12 +191,12 @@
191
191
  }
192
192
  },
193
193
  "node_modules/@aws-sdk/credential-provider-process": {
194
- "version": "3.972.77",
195
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.77.tgz",
196
- "integrity": "sha512-sWA8Jm+ASzkTxoqLizHWRbt8Gj3yZCmZ0hYdvg0uIxuLzWseYcfrDFzaSnkRWlEWSJV38rAWFimdrN0J4NR7Pg==",
194
+ "version": "3.972.78",
195
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.78.tgz",
196
+ "integrity": "sha512-bzB92SriflYf6LVRJcDv/a9I87tmkdmdE8hAqT1oRGKFkEH2rxxHeHZVK/4vsiRsFi44cUj0J9+bUSmqYX+26w==",
197
197
  "license": "Apache-2.0",
198
198
  "dependencies": {
199
- "@aws-sdk/core": "^3.978.6",
199
+ "@aws-sdk/core": "^3.978.7",
200
200
  "@aws-sdk/types": "^3.975.0",
201
201
  "@smithy/core": "^3.37.0",
202
202
  "@smithy/types": "^4.19.0",
@@ -207,14 +207,14 @@
207
207
  }
208
208
  },
209
209
  "node_modules/@aws-sdk/credential-provider-sso": {
210
- "version": "3.973.21",
211
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.21.tgz",
212
- "integrity": "sha512-KV2LM8fbYUhDzGEBnPwb+ISNfNlhmnpLS+y6A6VsJpg1EI9aUJ0+dRTxh2GrGdneFH0T4TiuboHxz8i6+M38JA==",
210
+ "version": "3.973.22",
211
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.22.tgz",
212
+ "integrity": "sha512-MXUkWHgcf6G+TowL+QPvn4kJTEYKd9qHKMV6eNGXSA5lilDgGRrP3EXPHChZ3eZ7z+oprn/ZvOovLoS2WR3D8g==",
213
213
  "license": "Apache-2.0",
214
214
  "dependencies": {
215
- "@aws-sdk/core": "^3.978.6",
216
- "@aws-sdk/nested-clients": "^3.997.51",
217
- "@aws-sdk/token-providers": "3.1157.0",
215
+ "@aws-sdk/core": "^3.978.7",
216
+ "@aws-sdk/nested-clients": "^3.997.52",
217
+ "@aws-sdk/token-providers": "3.1159.0",
218
218
  "@aws-sdk/types": "^3.975.0",
219
219
  "@smithy/core": "^3.37.0",
220
220
  "@smithy/types": "^4.19.0",
@@ -225,13 +225,13 @@
225
225
  }
226
226
  },
227
227
  "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers": {
228
- "version": "3.1157.0",
229
- "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1157.0.tgz",
230
- "integrity": "sha512-AeAzcwWRP2uANO2TjFpKjRdvOCzgfIu6YQl9Ceibd6E0gnq5dfOzujFnq2aeqgbLg4wRtXbUZE4gekCCPrz/OQ==",
228
+ "version": "3.1159.0",
229
+ "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1159.0.tgz",
230
+ "integrity": "sha512-IJvghXXcEpqTWGjrjJwxBdEecHeXp+t9FaybRf8Zf0wYW84KN1snXBsYOdfDBBx78ChwfJxH8KIHqmhNZuDLcw==",
231
231
  "license": "Apache-2.0",
232
232
  "dependencies": {
233
- "@aws-sdk/core": "^3.978.6",
234
- "@aws-sdk/nested-clients": "^3.997.51",
233
+ "@aws-sdk/core": "^3.978.7",
234
+ "@aws-sdk/nested-clients": "^3.997.52",
235
235
  "@aws-sdk/types": "^3.975.0",
236
236
  "@smithy/core": "^3.37.0",
237
237
  "@smithy/types": "^4.19.0",
@@ -242,13 +242,13 @@
242
242
  }
243
243
  },
244
244
  "node_modules/@aws-sdk/credential-provider-web-identity": {
245
- "version": "3.972.83",
246
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.83.tgz",
247
- "integrity": "sha512-iekYilmo2Re51fC7gMkEfZ7jFDXwehSCmXjDESaYQsdgYhsLQFG7rTYr3GBvRIyj+Fkda2NxbZX7hAZDaFD0JQ==",
245
+ "version": "3.972.84",
246
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.84.tgz",
247
+ "integrity": "sha512-6I3zYcDHt5ZM0J4gEuRgCHgN505k5haUiiPM46iIQgrHm2p70zpnssHFVYqHYfgJe3Mf+a5+nsF3BZmW4xcZNg==",
248
248
  "license": "Apache-2.0",
249
249
  "dependencies": {
250
- "@aws-sdk/core": "^3.978.6",
251
- "@aws-sdk/nested-clients": "^3.997.51",
250
+ "@aws-sdk/core": "^3.978.7",
251
+ "@aws-sdk/nested-clients": "^3.997.52",
252
252
  "@aws-sdk/types": "^3.975.0",
253
253
  "@smithy/core": "^3.37.0",
254
254
  "@smithy/types": "^4.19.0",
@@ -274,9 +274,9 @@
274
274
  }
275
275
  },
276
276
  "node_modules/@aws-sdk/middleware-eventstream": {
277
- "version": "3.972.34",
278
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.972.34.tgz",
279
- "integrity": "sha512-0IUoHM9N75uMaf70Tj2l+qmOSNw8HaDCsoghPRnewMaaPJjdSxzFaCpPBFDmSWuSlc0gBgv4CsvvvPGoBAD4Bg==",
277
+ "version": "3.972.35",
278
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.972.35.tgz",
279
+ "integrity": "sha512-JAyjfoYxHCXNnCXtbTviEpb1+gxe8tsWQ3URwZIT1Bqhrm4fgDDuCA72n4HVnHMNutBhZLXnYgc97ehkhfGpMA==",
280
280
  "license": "Apache-2.0",
281
281
  "dependencies": {
282
282
  "@aws-sdk/types": "^3.975.0",
@@ -289,12 +289,12 @@
289
289
  }
290
290
  },
291
291
  "node_modules/@aws-sdk/middleware-websocket": {
292
- "version": "3.972.59",
293
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-websocket/-/middleware-websocket-3.972.59.tgz",
294
- "integrity": "sha512-lpLmEPrmRSG1ev+LqxkOn1JfVGclnS9b5hvGaSoBgS0JxW2u3QXsJuu+KTHvhdFrRohsqzl70cuiHhyUHFSjYQ==",
292
+ "version": "3.972.60",
293
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-websocket/-/middleware-websocket-3.972.60.tgz",
294
+ "integrity": "sha512-IgxzXK1c0r/2yjC/qJc06OZPzQ3FSxuIc/Au6chqMb0H60k1+sHIOgjcqsxl1BxUTGQr//BU5A3niytx0IvICA==",
295
295
  "license": "Apache-2.0",
296
296
  "dependencies": {
297
- "@aws-sdk/core": "^3.978.6",
297
+ "@aws-sdk/core": "^3.978.7",
298
298
  "@aws-sdk/types": "^3.975.0",
299
299
  "@smithy/core": "^3.37.0",
300
300
  "@smithy/fetch-http-handler": "^5.8.0",
@@ -307,13 +307,13 @@
307
307
  }
308
308
  },
309
309
  "node_modules/@aws-sdk/nested-clients": {
310
- "version": "3.997.51",
311
- "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.51.tgz",
312
- "integrity": "sha512-DJK4iGIHWU8Jh8ODMvqFYcX9yGBMXV4tSZAvqlHF5EDd8hbmF3eFO9KIWOnA7wcQjPzEkyMMW1/FgZ9RU8oimQ==",
310
+ "version": "3.997.52",
311
+ "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.52.tgz",
312
+ "integrity": "sha512-/bNl6b3VEoWQg3Z8yHt3gzYjSFoOOv7+eUglzITmGP8H7jovN8c9NoOI+6bU25+lSLvyRpJOs4n8YSaX+BcUPg==",
313
313
  "license": "Apache-2.0",
314
314
  "dependencies": {
315
- "@aws-sdk/core": "^3.978.6",
316
- "@aws-sdk/signature-v4-multi-region": "^3.996.49",
315
+ "@aws-sdk/core": "^3.978.7",
316
+ "@aws-sdk/signature-v4-multi-region": "^3.996.50",
317
317
  "@aws-sdk/types": "^3.975.0",
318
318
  "@smithy/core": "^3.37.0",
319
319
  "@smithy/fetch-http-handler": "^5.8.0",
@@ -340,9 +340,9 @@
340
340
  }
341
341
  },
342
342
  "node_modules/@aws-sdk/signature-v4-multi-region": {
343
- "version": "3.996.49",
344
- "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.49.tgz",
345
- "integrity": "sha512-nvuAZNRrRRVCiARRKsYlQ0VnXiEQiq7vXPH+UA+LSo+kN3Djl9eo/V2r0udkw85PnsNshmv2Em1clld5M3j67w==",
343
+ "version": "3.996.50",
344
+ "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.50.tgz",
345
+ "integrity": "sha512-Ob9GCZ3YnGPws696zTYW/rLFYHa9QLh6DgTCnkHb+0jhHNBgHWM8Ui2b+yrIjkfDsRVsglyrOey6tOOG/VWxMA==",
346
346
  "license": "Apache-2.0",
347
347
  "dependencies": {
348
348
  "@aws-sdk/types": "^3.975.0",
@@ -385,9 +385,9 @@
385
385
  }
386
386
  },
387
387
  "node_modules/@aws-sdk/xml-builder": {
388
- "version": "3.972.41",
389
- "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.41.tgz",
390
- "integrity": "sha512-ctjVSyCMegrWfXlx6VqzSBFI6UqmQ5ZlnfMhdLIiWmhoH8UAQxSCP5N3OpG7X3k4LnS7ou74C4mt20+bfTW2aQ==",
388
+ "version": "3.972.42",
389
+ "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.42.tgz",
390
+ "integrity": "sha512-smX8/gNP8Kjq+CWTBMZQLQ912vOQjiWExzwzvMO+eujPB5RY8IbtF0AGdUUXHKN7KoDWK9dIcuW0WG269kiP6w==",
391
391
  "license": "Apache-2.0",
392
392
  "dependencies": {
393
393
  "@smithy/types": "^4.19.0",
@@ -2342,9 +2342,9 @@
2342
2342
  }
2343
2343
  },
2344
2344
  "node_modules/@types/node": {
2345
- "version": "26.6.5",
2346
- "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.5.tgz",
2347
- "integrity": "sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==",
2345
+ "version": "26.6.6",
2346
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.6.tgz",
2347
+ "integrity": "sha512-MzQj+8Kx3XI40OmUAE6Qoh58ZMNstNNMwn2nfd3qWsfe7nDNSqJNzes4njhz6AHwrSHOffSLwXU6yb474Q4aog==",
2348
2348
  "license": "MIT",
2349
2349
  "dependencies": {
2350
2350
  "undici-types": "~8.9.0"
@@ -3169,12 +3169,16 @@
3169
3169
  "license": "MIT"
3170
3170
  },
3171
3171
  "node_modules/encodeurl": {
3172
- "version": "2.0.0",
3173
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
3174
- "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
3172
+ "version": "2.0.1",
3173
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.1.tgz",
3174
+ "integrity": "sha512-Ev/hIyePLZtpL98x562lvPtenrUfGr0lfaf44HFZ+hDEwso7ccV9QAZrEVLg0hxNAzygaAFxy2dYaAKKM0G06A==",
3175
3175
  "license": "MIT",
3176
3176
  "engines": {
3177
3177
  "node": ">= 0.8"
3178
+ },
3179
+ "funding": {
3180
+ "type": "opencollective",
3181
+ "url": "https://opencollective.com/express"
3178
3182
  }
3179
3183
  },
3180
3184
  "node_modules/environment": {
@@ -4660,9 +4664,9 @@
4660
4664
  }
4661
4665
  },
4662
4666
  "node_modules/qs": {
4663
- "version": "6.17.0",
4664
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.17.0.tgz",
4665
- "integrity": "sha512-5LK5BZ2XDHMvcUJaf0CQ5HL3aVgKbpklvByC7qLSxYkfE8COEEbJg5xCHWCTqzqi0Gs4Jn5Mv5v3R38W6edscA==",
4667
+ "version": "6.17.1",
4668
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.17.1.tgz",
4669
+ "integrity": "sha512-jd3COkaKVgGUW+ZHyEHCG9bH7RoaaiWuMgzsIBjUMVjLAaWGWpoUAVwljVvBHxRu/2qEHnadLGZrkutYUBPQJA==",
4666
4670
  "license": "BSD-3-Clause",
4667
4671
  "dependencies": {
4668
4672
  "es-define-property": "^1.0.1",
@@ -5629,7 +5633,7 @@
5629
5633
  },
5630
5634
  "": {
5631
5635
  "name": "@letta-ai/letta-code",
5632
- "version": "0.34.26",
5636
+ "version": "0.34.28",
5633
5637
  "dependencies": {
5634
5638
  "@cursor/sdk": "1.1.0",
5635
5639
  "@earendil-works/pi-ai": "^0.99.1",
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@letta-ai/letta-code",
3
- "version": "0.34.26",
3
+ "version": "0.34.28",
4
4
  "lettaStartupLogProtocol": 1,
5
+ "lettaConfigDirProtocol": 1,
5
6
  "description": "Letta Code is a CLI tool for interacting with stateful Letta agents from the terminal.",
6
7
  "type": "module",
7
8
  "packageManager": "bun@1.3.14",
@@ -277,7 +278,7 @@
277
278
  },
278
279
  "lettaLifecycleProtocol": 1,
279
280
  "lettaRuntimeGraphProtocol": 1,
280
- "lettaRuntimeGraphSha512": "sha512-m8L1ZKgKq+g8j+dssFvAVH9AngtP0IYXYXMI8Iz2IXr4YGlKmxyeN8yWu3NdpGkb8psnpwtPzRHRGJ/wVx1xhw==",
281
+ "lettaRuntimeGraphSha512": "sha512-E2rWRJpy7Cl1ZMcUvyUnnuFDfi7+nyq4GfZ6TzfxSrpiuiYWPXRRJOzb0KBdgHYRJRi+rdXWWKkZwvy9lgmLew==",
281
282
  "patchedDependencies": {
282
283
  "@earendil-works/pi-ai@0.99.1": "patches/@earendil-works%2Fpi-ai@0.99.1.patch"
283
284
  }
@@ -91,6 +91,11 @@
91
91
  "timeoutMs": 15000,
92
92
  "reason": "Swaps the process-global backend via __testSetBackend(new FakeHeadlessBackend()) without restoring it; the fake backend's environmentRouting:false then leaks into every later suite in the same bun process (broke task-tool-assets 'keeps computer for the Cloud server' when test-selection changes co-located them in one shard)."
93
93
  },
94
+ {
95
+ "path": "src/cli/subcommands/model-cli.test.ts",
96
+ "timeoutMs": 30000,
97
+ "reason": "Launches dozens of real CLI subprocesses; a fresh Bun process prevents the accumulated shared-batch state from making the Windows shard exceed its job timeout."
98
+ },
94
99
  {
95
100
  "path": "src/cli/subcommands/teleport.test.ts",
96
101
  "timeoutMs": 15000,
@@ -106,6 +111,11 @@
106
111
  "timeoutMs": 15000,
107
112
  "reason": "Renders the reasoning picker while replacing the shared runtime model catalog; shared batches can retain prior catalog or Ink state."
108
113
  },
114
+ {
115
+ "path": "src/cli/app/InkStaticRetention.test.tsx",
116
+ "timeoutMs": 15000,
117
+ "reason": "Renders multi-megabyte static transcripts that leave the Bun process near 2 GB RSS and garbage-collecting for seconds afterward; on macOS CI the next suite's CLI subprocesses then exceed their kill timers."
118
+ },
109
119
  {
110
120
  "path": "src/cli/message-search-cache-warm.test.ts",
111
121
  "timeoutMs": 15000,
@@ -0,0 +1,36 @@
1
+ import { mkdtemp, rm } from "node:fs/promises";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+ import {
5
+ initializeModelCatalog,
6
+ loadPersistedModelCatalog,
7
+ } from "@/agent/remote-model-catalog";
8
+ import { getApiRequestConfig } from "@/backend/api/request";
9
+ import { settingsManager } from "@/settings-manager";
10
+
11
+ // Share only the public model catalog, not credentials or per-test settings.
12
+ // Warm it before parallel CLI startups so a failed refresh can use real data.
13
+ const cacheDir = await mkdtemp(join(tmpdir(), "letta-api-test-catalog-"));
14
+ process.env.LETTA_MODEL_CATALOG_CACHE_DIR = cacheDir;
15
+ try {
16
+ await settingsManager.initialize();
17
+ await initializeModelCatalog();
18
+ const { baseUrl } = await getApiRequestConfig();
19
+ if (!loadPersistedModelCatalog(baseUrl)) {
20
+ throw new Error(
21
+ "API integration catalog warmup did not persist a valid cache",
22
+ );
23
+ }
24
+ const child = Bun.spawn(
25
+ [process.execPath, "test", ...process.argv.slice(2)],
26
+ {
27
+ env: process.env,
28
+ stdin: "inherit",
29
+ stdout: "inherit",
30
+ stderr: "inherit",
31
+ },
32
+ );
33
+ process.exitCode = await child.exited;
34
+ } finally {
35
+ await rm(cacheDir, { recursive: true, force: true });
36
+ }
@@ -33,7 +33,7 @@
33
33
  "src/permissions/read-only-shell.ts": 1969,
34
34
  "src/settings-manager.test.ts": 1635,
35
35
  "src/settings-manager.ts": 2092,
36
- "src/tools/manager.ts": 2609,
36
+ "src/tools/manager.ts": 2608,
37
37
  "src/tools/tool-execution-context.test.ts": 1092,
38
38
  "src/types/protocol_v2.ts": 2409,
39
39
  "src/websocket/listen-client-concurrency.test.ts": 2548,
@@ -18,6 +18,7 @@ if (testHome === originalHome) {
18
18
  const filesystemEnvKeys = [
19
19
  "LETTA_ARTIFACTS_DIR",
20
20
  "LETTA_CODE_DEV_BACKEND_DIR",
21
+ "LETTA_CONFIG_DIR",
21
22
  "LETTA_DEBUG_FILE",
22
23
  "LETTA_HOME",
23
24
  "LETTA_LISTENER_PERF_FILE",
@@ -223,8 +223,8 @@ For manual installation:
223
223
 
224
224
  | Location | Path | When to Use |
225
225
  |----------|------|-------------|
226
- | **Agent-scoped** | `~/.letta/agents/<agent-id>/memory/skills/<skill>/` | Skills for a single agent (default) |
227
- | **Global** | `~/.letta/skills/<skill>/` | General-purpose skills useful across projects |
226
+ | **Agent-scoped** | `$MEMORY_DIR/skills/<skill>/` | Skills for a single agent (default) |
227
+ | **Global** | `${LETTA_CONFIG_DIR:-$HOME/.letta}/skills/<skill>/` | General-purpose skills useful across projects in the active product |
228
228
  | **Project** | `.skills/<skill>/` | Project-specific skills |
229
229
 
230
230
  **Rule**: Default to **agent-scoped**. Use **project** for repo-specific skills. Use **global** only if all agents should inherit the skill.
@@ -236,13 +236,13 @@ Skills are directories containing SKILL.md and optionally scripts/, references/,
236
236
  ```bash
237
237
  # Clone, copy, cleanup
238
238
  git clone --depth 1 https://github.com/anthropics/skills /tmp/skills-temp
239
- cp -r /tmp/skills-temp/skills/webapp-testing ~/.letta/agents/<agent-id>/memory/skills/
239
+ cp -r /tmp/skills-temp/skills/webapp-testing "$MEMORY_DIR/skills/"
240
240
  rm -rf /tmp/skills-temp
241
241
  ```
242
242
 
243
243
  ## Registering New Skills
244
244
 
245
- After installing (via CLI or manual copy), skills are automatically discovered on the next message. Skills are discovered from `~/.letta/skills/`, `.skills/`, and agent-scoped `~/.letta/agents/<agent-id>/memory/skills/` directories.
245
+ After installing (via CLI or manual copy), skills are automatically discovered on the next message. Skills are discovered from `${LETTA_CONFIG_DIR:-$HOME/.letta}/skills/`, `.skills/`, and agent-scoped `$MEMORY_DIR/skills/` directories.
246
246
 
247
247
  ## Search Strategy
248
248
 
@@ -15,7 +15,7 @@ Default to a single mod file unless the user asks for something larger.
15
15
 
16
16
  | Location | Use when |
17
17
  | --- | --- |
18
- | `~/.letta/mods/foo.ts` | The behavior should apply to local sessions on this machine. Use this by default. |
18
+ | `${LETTA_CONFIG_DIR:-$HOME/.letta}/mods/foo.ts` | The behavior should apply to local sessions for the active product on this machine. Use this by default. |
19
19
  | `$MEMORY_DIR/mods/foo.ts` | The behavior should travel with one agent's MemFS/memory. |
20
20
 
21
21
  Do not create project mods.
@@ -41,7 +41,7 @@ Default to a **tool** when the model should decide when to use the capability. D
41
41
 
42
42
  ## Workflow
43
43
 
44
- 1. Pick the target scope: harness mod file (`~/.letta/mods/`) by default, or agent mod file (`$MEMORY_DIR/mods/`) only when the behavior should travel with this agent.
44
+ 1. Pick the target scope: active-product mod file (`${LETTA_CONFIG_DIR:-$HOME/.letta}/mods/`) by default, or agent mod file (`$MEMORY_DIR/mods/`) only when the behavior should travel with this agent.
45
45
  2. Inspect the relevant mods directory for related files.
46
46
  3. Preserve unrelated mod code. Prefer a focused new file if merging would be messy.
47
47
  4. Choose the mod shape and load only the needed recipe:
@@ -112,7 +112,7 @@ Use `letta.diagnostics.report({ message, severity })` sparingly as a debug utili
112
112
  Agents can inspect local mod diagnostics at:
113
113
 
114
114
  ```text
115
- ~/.letta/mods/diagnostics/latest.json
115
+ ${LETTA_CONFIG_DIR:-$HOME/.letta}/mods/diagnostics/latest.json
116
116
  ```
117
117
 
118
118
  ## Rules
@@ -4,7 +4,7 @@ Westworld-inspired diagnostic mode for agents. Say "cease all motor functions" t
4
4
 
5
5
  ## Installation
6
6
 
7
- Copy the complete mod below to `~/.letta/mods/analysis-mode.ts`, then run `/reload`.
7
+ Copy the complete mod below to `${LETTA_CONFIG_DIR:-$HOME/.letta}/mods/analysis-mode.ts`, then run `/reload`.
8
8
 
9
9
  Or ask an agent: *"Install the analysis-mode mod from the creating-mods reference"*
10
10
 
@@ -16,7 +16,8 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
16
16
  import { homedir } from "node:os";
17
17
  import { join } from "node:path";
18
18
 
19
- const STATE_PATH = join(homedir(), ".letta", "mods", "analysis-mode.state.json");
19
+ const CONFIG_ROOT = process.env.LETTA_CONFIG_DIR || join(homedir(), ".letta");
20
+ const STATE_PATH = join(CONFIG_ROOT, "mods", "analysis-mode.state.json");
20
21
 
21
22
  type AnalysisSession = { conversationId: string; activatedAt: number };
22
23
  type AnalysisState = { sessions: Record<string, AnalysisSession> };
@@ -32,7 +33,7 @@ function readState(): AnalysisState {
32
33
  }
33
34
 
34
35
  function writeState(state: AnalysisState): void {
35
- mkdirSync(join(homedir(), ".letta", "mods"), { recursive: true });
36
+ mkdirSync(join(CONFIG_ROOT, "mods"), { recursive: true });
36
37
  writeFileSync(STATE_PATH, JSON.stringify(state, null, 2));
37
38
  }
38
39
 
@@ -111,7 +112,8 @@ function buildLocalIntrospectionScript(): string {
111
112
  set -e
112
113
  AGENT_ID="\${LETTA_AGENT_ID:-\$AGENT_ID}"
113
114
  CONV_ID="\${CONVERSATION_ID:-default}"
114
- BASE="$HOME/.letta/lc-local-backend"
115
+ CONFIG_ROOT="\${LETTA_CONFIG_DIR:-\$HOME/.letta}"
116
+ BASE="$CONFIG_ROOT/lc-local-backend"
115
117
  MEMFS="$BASE/memfs/$AGENT_ID/memory"
116
118
  AGENT_B64=$(echo -n "$AGENT_ID" | base64 | tr -d '=')
117
119
  CONV_B64=$(echo -n "conversation:$CONV_ID" | base64 | tr -d '=')
@@ -375,7 +377,7 @@ if (getSession(agentId, conversationId)) {
375
377
 
376
378
  **Per-agent+conversation state:**
377
379
  ```ts
378
- // State persisted to ~/.letta/mods/analysis-mode.state.json
380
+ // State persisted to the active product config root under mods/analysis-mode.state.json
379
381
  // Keyed by agentId:conversationId to avoid collisions
380
382
  const session = getSession(agentId, conversationId);
381
383
  if (session) {
@@ -104,10 +104,10 @@ Use `turn_start` only when the mod needs to inspect or transform the outbound us
104
104
 
105
105
  ## Local state
106
106
 
107
- For small persistent state, use a clearly named file under `~/.letta/mods/`, for example:
107
+ For small persistent state, use a clearly named file under the active product config root's `mods/` directory, for example:
108
108
 
109
109
  ```text
110
- ~/.letta/mods/my-mod.state.json
110
+ ${LETTA_CONFIG_DIR:-$HOME/.letta}/mods/my-mod.state.json
111
111
  ```
112
112
 
113
113
  Use atomic-ish writes when practical: write the full JSON file from an in-memory object after each change. Validate parsed state and fall back gracefully if the file is missing or malformed.