@letta-ai/letta-code 0.34.26 → 0.34.27
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/cursor-worker.js +4 -3
- package/dist/agent-presets.js +5 -5
- package/dist/agent-presets.js.map +1 -1
- package/dist/mcp-client.js +2 -2
- package/dist/mcp-client.js.map +1 -1
- package/dist/mcp-oauth.js +26 -16
- package/dist/mcp-oauth.js.map +6 -5
- package/dist/memory-confinement.js +109 -51
- package/dist/memory-confinement.js.map +9 -8
- package/dist/types/agent/mcp-originator-authority-file.d.ts +1 -0
- package/dist/types/agent/mcp-originator-authority-file.d.ts.map +1 -1
- package/dist/types/agent/memory-filesystem.d.ts +3 -3
- package/dist/types/agent/memory-filesystem.d.ts.map +1 -1
- package/dist/types/agent/memory-git.d.ts +2 -2
- package/dist/types/agent/memory-git.d.ts.map +1 -1
- package/dist/types/agent/skills.d.ts +3 -3
- package/dist/types/agent/skills.d.ts.map +1 -1
- package/dist/types/agent/subagents/index.d.ts +4 -0
- package/dist/types/agent/subagents/index.d.ts.map +1 -1
- package/dist/types/agent/subagents/subagent-launcher.d.ts.map +1 -1
- package/dist/types/backend/api/schedules.d.ts +16 -2
- package/dist/types/backend/api/schedules.d.ts.map +1 -1
- package/dist/types/channels/types.d.ts +1 -1
- package/dist/types/cli/helpers/chunk-log.d.ts.map +1 -1
- package/dist/types/cron/cron-file.d.ts.map +1 -1
- package/dist/types/hooks/loader.d.ts.map +1 -1
- package/dist/types/mods/paths.d.ts +3 -3
- package/dist/types/mods/paths.d.ts.map +1 -1
- package/dist/types/permissions/agent-memory-prefixes.d.ts.map +1 -1
- package/dist/types/permissions/analyzer.d.ts +1 -0
- package/dist/types/permissions/analyzer.d.ts.map +1 -1
- package/dist/types/permissions/cross-agent-guard.d.ts.map +1 -1
- package/dist/types/permissions/loader.d.ts +2 -1
- package/dist/types/permissions/loader.d.ts.map +1 -1
- package/dist/types/permissions/sandbox-policy.d.ts +9 -7
- package/dist/types/permissions/sandbox-policy.d.ts.map +1 -1
- package/dist/types/sandbox/bwrap.d.ts +2 -2
- package/dist/types/sandbox/bwrap.d.ts.map +1 -1
- package/dist/types/sandbox/policy.d.ts +20 -3
- package/dist/types/sandbox/policy.d.ts.map +1 -1
- package/dist/types/sandbox/seatbelt.d.ts +1 -1
- package/dist/types/sandbox/seatbelt.d.ts.map +1 -1
- package/dist/types/settings-manager.d.ts +4 -12
- package/dist/types/settings-manager.d.ts.map +1 -1
- package/dist/types/tools/commit-trailer.d.ts +27 -0
- package/dist/types/tools/commit-trailer.d.ts.map +1 -0
- package/dist/types/tools/impl/codex-app-server.d.ts +2 -0
- package/dist/types/tools/impl/codex-app-server.d.ts.map +1 -1
- package/dist/types/tools/impl/cursor-session.d.ts +2 -0
- package/dist/types/tools/impl/cursor-session.d.ts.map +1 -1
- package/dist/types/tools/impl/cursor-worker.d.ts +4 -1
- package/dist/types/tools/impl/cursor-worker.d.ts.map +1 -1
- package/dist/types/tools/impl/overflow.d.ts +1 -1
- package/dist/types/tools/impl/overflow.d.ts.map +1 -1
- package/dist/types/tools/impl/ripgrep-manager.d.ts.map +1 -1
- package/dist/types/tools/impl/shell-env.d.ts.map +1 -1
- package/dist/types/tools/impl/wake.d.ts.map +1 -1
- package/dist/types/tools/script-tool-scope.d.ts.map +1 -1
- package/dist/types/tools/tool-definitions.d.ts.map +1 -1
- package/dist/types/utils/fs.d.ts +5 -1
- package/dist/types/utils/fs.d.ts.map +1 -1
- package/dist/types/utils/local-backend-paths.d.ts +1 -1
- package/dist/types/utils/local-backend-paths.d.ts.map +1 -1
- package/dist/types/utils/secrets.d.ts +1 -1
- package/dist/types/utils/secrets.d.ts.map +1 -1
- package/dist/types/utils/settings-path.d.ts +14 -0
- package/dist/types/utils/settings-path.d.ts.map +1 -0
- package/dist/types/utils/transcript-paths.d.ts +1 -1
- package/dist/types/websocket/listener/constants.d.ts +6 -0
- package/dist/types/websocket/listener/constants.d.ts.map +1 -1
- package/dist/types/websocket/listener/input-disposition-path.d.ts.map +1 -1
- package/dist/types/websocket/listener/interrupted-turn-storage.d.ts.map +1 -1
- package/dist/types/websocket/listener/org-credentials.d.ts.map +1 -1
- package/dist/types/websocket/listener/remote-settings.d.ts +2 -2
- package/dist/types/websocket/listener/remote-settings.d.ts.map +1 -1
- package/dist/types/websocket/listener/turn-finished-replay.d.ts +1 -0
- package/dist/types/websocket/listener/turn-finished-replay.d.ts.map +1 -1
- package/letta.js +2592 -1947
- package/npm-shrinkwrap.json +90 -86
- package/package.json +3 -2
- package/scripts/isolated-unit-tests.json +10 -0
- package/scripts/test-home-preload.ts +1 -0
- package/skills/acquiring-skills/SKILL.md +4 -4
- package/skills/creating-mods/SKILL.md +3 -3
- package/skills/creating-mods/references/analysis-mode.md +7 -5
- package/skills/creating-mods/references/architecture.md +2 -2
- package/skills/creating-mods/references/plan-mode.md +12 -11
- package/skills/creating-mods/references/providers.md +1 -1
- package/skills/creating-skills/scripts/init-skill.ts +4 -2
- package/skills/customizing-commands/SKILL.md +3 -3
- package/skills/customizing-statusline/SKILL.md +3 -3
- package/skills/customizing-statusline/references/api.md +3 -3
- package/skills/customizing-statusline/references/migration.md +2 -2
- package/skills/initializing-memory/SKILL.md +1 -1
- package/skills/self-configuration/SKILL.md +4 -4
- package/skills/self-configuration/scripts/add_permission.py +26 -5
- package/skills/self-configuration/scripts/show_config.py +17 -2
- package/skills/video-generation/SKILL.md +152 -0
- package/skills/workflow-authoring/SKILL.md +1 -1
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.27",
|
|
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.
|
|
65
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.978.
|
|
66
|
-
"integrity": "sha512-
|
|
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.
|
|
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.
|
|
84
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.
|
|
85
|
-
"integrity": "sha512-
|
|
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.
|
|
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.
|
|
100
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.
|
|
101
|
-
"integrity": "sha512-
|
|
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.
|
|
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.
|
|
132
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.
|
|
133
|
-
"integrity": "sha512-
|
|
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.
|
|
137
|
-
"@aws-sdk/credential-provider-env": "^3.972.
|
|
138
|
-
"@aws-sdk/credential-provider-http": "^3.972.
|
|
139
|
-
"@aws-sdk/credential-provider-login": "^3.972.
|
|
140
|
-
"@aws-sdk/credential-provider-process": "^3.972.
|
|
141
|
-
"@aws-sdk/credential-provider-sso": "^3.973.
|
|
142
|
-
"@aws-sdk/credential-provider-web-identity": "^3.972.
|
|
143
|
-
"@aws-sdk/nested-clients": "^3.997.
|
|
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.
|
|
156
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.
|
|
157
|
-
"integrity": "sha512-
|
|
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.
|
|
161
|
-
"@aws-sdk/nested-clients": "^3.997.
|
|
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.
|
|
173
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.
|
|
174
|
-
"integrity": "sha512
|
|
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.
|
|
178
|
-
"@aws-sdk/credential-provider-http": "^3.972.
|
|
179
|
-
"@aws-sdk/credential-provider-ini": "^3.973.
|
|
180
|
-
"@aws-sdk/credential-provider-process": "^3.972.
|
|
181
|
-
"@aws-sdk/credential-provider-sso": "^3.973.
|
|
182
|
-
"@aws-sdk/credential-provider-web-identity": "^3.972.
|
|
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.
|
|
195
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.
|
|
196
|
-
"integrity": "sha512-
|
|
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.
|
|
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.
|
|
211
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.
|
|
212
|
-
"integrity": "sha512-
|
|
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.
|
|
216
|
-
"@aws-sdk/nested-clients": "^3.997.
|
|
217
|
-
"@aws-sdk/token-providers": "3.
|
|
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.
|
|
229
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.
|
|
230
|
-
"integrity": "sha512-
|
|
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.
|
|
234
|
-
"@aws-sdk/nested-clients": "^3.997.
|
|
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.
|
|
246
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.
|
|
247
|
-
"integrity": "sha512-
|
|
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.
|
|
251
|
-
"@aws-sdk/nested-clients": "^3.997.
|
|
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.
|
|
278
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.972.
|
|
279
|
-
"integrity": "sha512-
|
|
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.
|
|
293
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-websocket/-/middleware-websocket-3.972.
|
|
294
|
-
"integrity": "sha512-
|
|
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.
|
|
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.
|
|
311
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.
|
|
312
|
-
"integrity": "sha512
|
|
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.
|
|
316
|
-
"@aws-sdk/signature-v4-multi-region": "^3.996.
|
|
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.
|
|
344
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.
|
|
345
|
-
"integrity": "sha512-
|
|
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.
|
|
389
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.
|
|
390
|
-
"integrity": "sha512-
|
|
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.
|
|
2346
|
-
"resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.
|
|
2347
|
-
"integrity": "sha512-
|
|
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.
|
|
3173
|
-
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.
|
|
3174
|
-
"integrity": "sha512-
|
|
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.
|
|
4664
|
-
"resolved": "https://registry.npmjs.org/qs/-/qs-6.17.
|
|
4665
|
-
"integrity": "sha512-
|
|
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.
|
|
5636
|
+
"version": "0.34.27",
|
|
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.
|
|
3
|
+
"version": "0.34.27",
|
|
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-
|
|
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,
|
|
@@ -223,8 +223,8 @@ For manual installation:
|
|
|
223
223
|
|
|
224
224
|
| Location | Path | When to Use |
|
|
225
225
|
|----------|------|-------------|
|
|
226
|
-
| **Agent-scoped** |
|
|
227
|
-
| **Global** |
|
|
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
|
|
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
|
|
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
|
-
|
|
|
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:
|
|
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
|
-
|
|
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
|
|
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
|
|
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(
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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.
|
|
@@ -19,10 +19,10 @@ This is a pattern reference, not a full product implementation. Keep local mods
|
|
|
19
19
|
|
|
20
20
|
```text
|
|
21
21
|
/plan or enter_plan_mode
|
|
22
|
-
-> create
|
|
22
|
+
-> create <product-config>/plans/<random>.md
|
|
23
23
|
-> remember active plan state for this conversation
|
|
24
24
|
-> remind the agent that only read-only tools and plan-file writes are allowed
|
|
25
|
-
-> permission overlay denies mutations outside
|
|
25
|
+
-> permission overlay denies mutations outside <product-config>/plans/*.md
|
|
26
26
|
-> agent writes the plan with normal Write/Edit/ApplyPatch tools
|
|
27
27
|
-> agent reads the plan and calls AskUserQuestion with the full current plan text and Approve / Revise
|
|
28
28
|
-> if approved, agent calls exit_plan_mode
|
|
@@ -46,15 +46,16 @@ Do not use panels for persistent mode state. Panels are transient UI and can be
|
|
|
46
46
|
|
|
47
47
|
## State
|
|
48
48
|
|
|
49
|
-
Use small local state under
|
|
49
|
+
Use small local state under the active product config root's `mods/` directory, keyed by conversation ID:
|
|
50
50
|
|
|
51
51
|
```ts
|
|
52
52
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
53
53
|
import { homedir } from "node:os";
|
|
54
54
|
import { join, relative } from "node:path";
|
|
55
55
|
|
|
56
|
-
const
|
|
57
|
-
const
|
|
56
|
+
const CONFIG_ROOT = process.env.LETTA_CONFIG_DIR || join(homedir(), ".letta");
|
|
57
|
+
const PLANS_DIR = join(CONFIG_ROOT, "plans");
|
|
58
|
+
const STATE_PATH = join(CONFIG_ROOT, "mods", "plan-mode.state.json");
|
|
58
59
|
const GLOBAL_CONVERSATION_ID = "__global__";
|
|
59
60
|
|
|
60
61
|
type PlanSession = {
|
|
@@ -81,12 +82,12 @@ function readState(): PlanState {
|
|
|
81
82
|
}
|
|
82
83
|
|
|
83
84
|
function writeState(state: PlanState): void {
|
|
84
|
-
mkdirSync(join(
|
|
85
|
+
mkdirSync(join(CONFIG_ROOT, "mods"), { recursive: true });
|
|
85
86
|
writeFileSync(STATE_PATH, JSON.stringify(state, null, 2));
|
|
86
87
|
}
|
|
87
88
|
```
|
|
88
89
|
|
|
89
|
-
Generate plan paths under
|
|
90
|
+
Generate plan paths under `${LETTA_CONFIG_DIR:-$HOME/.letta}/plans/`. The old built-in used random adjective/adjective/noun names like `zesty-dazzling-coral.md`; any collision-resistant readable name is fine.
|
|
90
91
|
|
|
91
92
|
## Entry command and tool
|
|
92
93
|
|
|
@@ -229,13 +230,13 @@ function isAllowedReadOnlySubagent(args) {
|
|
|
229
230
|
function isPlanFileWrite(toolName, args, cwd) {
|
|
230
231
|
// For Write/Edit-style tools, check file_path/path/notebook_path.
|
|
231
232
|
// For ApplyPatch-style tools, parse *** Add/Update/Delete File and *** Move to directives.
|
|
232
|
-
// Allow only if every target resolves to a .md file under
|
|
233
|
+
// Allow only if every target resolves to a .md file under CONFIG_ROOT/plans/.
|
|
233
234
|
}
|
|
234
235
|
|
|
235
236
|
if (letta.capabilities.permissions) {
|
|
236
237
|
disposers.push(letta.permissions.register({
|
|
237
238
|
id: "plan-mode",
|
|
238
|
-
description: "Allow read-only tools and writes only to
|
|
239
|
+
description: "Allow read-only tools and writes only to the active product plans directory while plan mode is active.",
|
|
239
240
|
check(event) {
|
|
240
241
|
const session = getSession(event.conversationId);
|
|
241
242
|
if (!session) return;
|
|
@@ -267,7 +268,7 @@ if (letta.capabilities.permissions) {
|
|
|
267
268
|
}
|
|
268
269
|
```
|
|
269
270
|
|
|
270
|
-
Shell allowlists are easy to get wrong. Start conservative: allow clearly read-only shell commands if needed, plus a narrow plan-file heredoc or `mv old.md new.md` only when every target is inside
|
|
271
|
+
Shell allowlists are easy to get wrong. Start conservative: allow clearly read-only shell commands if needed, plus a narrow plan-file heredoc or `mv old.md new.md` only when every target is inside `${LETTA_CONFIG_DIR:-$HOME/.letta}/plans/*.md`. Deny mutating shell patterns such as `sed -i`, `find -delete`, `rm`, `cp`, `touch`, package installs, and arbitrary interpreters.
|
|
271
272
|
|
|
272
273
|
## Exit tool
|
|
273
274
|
|
|
@@ -315,4 +316,4 @@ if (letta.capabilities.tools) {
|
|
|
315
316
|
- Keep `exit_plan_mode` as the final state transition and execution handoff. The approved-plan text in its tool return is useful model context.
|
|
316
317
|
- Plan approval must include the full current plan text in `AskUserQuestion.question`, not just a summary or "does this look right?". After revisions, re-read the file and present the full revised plan again.
|
|
317
318
|
- Keep arbitrary coding subagents denied in plan mode unless the runtime has a true read-only child mode. With the current subagent set, allow only recall-style subagents.
|
|
318
|
-
- If the user renames the plan file, exit logic can use the newest non-empty
|
|
319
|
+
- If the user renames the plan file, exit logic can use the newest non-empty file under the active product's `plans/` directory modified after plan mode started, or accept an optional plan path. Keep the user-facing flow normal: write plan file, ask approval, then exit.
|
|
@@ -9,7 +9,7 @@ For multi-capability mods that combine a provider with commands, tools, UI, or s
|
|
|
9
9
|
## Quick pattern
|
|
10
10
|
|
|
11
11
|
```ts
|
|
12
|
-
//
|
|
12
|
+
// ${LETTA_CONFIG_DIR:-$HOME/.letta}/mods/kilo.ts
|
|
13
13
|
export default function activate(letta) {
|
|
14
14
|
if (!letta.capabilities.providers) return;
|
|
15
15
|
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Examples:
|
|
9
9
|
* npx tsx init-skill.ts my-new-skill --path .skills
|
|
10
|
-
* npx tsx init-skill.ts my-api-helper --path
|
|
10
|
+
* npx tsx init-skill.ts my-api-helper --path "${LETTA_CONFIG_DIR:-$HOME/.letta}/skills"
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import { chmodSync, existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
@@ -268,7 +268,9 @@ if (isMainModule()) {
|
|
|
268
268
|
console.log(" - Must match directory name exactly");
|
|
269
269
|
console.log("\nExamples:");
|
|
270
270
|
console.log(" npx tsx init-skill.ts my-new-skill --path .skills");
|
|
271
|
-
console.log(
|
|
271
|
+
console.log(
|
|
272
|
+
` npx tsx init-skill.ts my-api-helper --path "\${LETTA_CONFIG_DIR:-$HOME/.letta}/skills"`,
|
|
273
|
+
);
|
|
272
274
|
process.exit(1);
|
|
273
275
|
}
|
|
274
276
|
|