@letta-ai/letta-code-sdk 0.0.2 → 0.0.4
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/README.md +94 -98
- package/dist/index.d.ts +51 -52
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +53 -30
- package/dist/index.js.map +6 -6
- package/dist/session.d.ts.map +1 -1
- package/dist/transport.d.ts.map +1 -1
- package/dist/types.d.ts +11 -35
- package/dist/types.d.ts.map +1 -1
- package/dist/validation.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
# Letta Code SDK
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/@letta-ai/letta-code-sdk)
|
|
3
|
+
[](https://www.npmjs.com/package/@letta-ai/letta-code-sdk) [](https://discord.gg/letta)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
> [!TIP]
|
|
6
|
+
> Check out [**LettaBot**](https://github.com/letta-ai/lettabot) and [**Letta Cowork**](github.com/letta-ai/letta-cowork), two open-source apps built on the **Letta Code SDK**.
|
|
7
|
+
|
|
8
|
+
The SDK interface to [**Letta Code**](https://github.com/letta-ai/letta-code). Build agents with persistent memory that learn over time.
|
|
6
9
|
|
|
7
10
|
```typescript
|
|
8
|
-
import {
|
|
11
|
+
import { createSession } from '@letta-ai/letta-code-sdk';
|
|
9
12
|
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
const session = createSession();
|
|
14
|
+
await session.send('Find and fix the bug in auth.py');
|
|
15
|
+
for await (const msg of session.stream()) {
|
|
16
|
+
if (msg.type === 'assistant') console.log(msg.content);
|
|
17
|
+
}
|
|
15
18
|
```
|
|
16
19
|
|
|
17
20
|
## Installation
|
|
@@ -27,19 +30,24 @@ npm install @letta-ai/letta-code-sdk
|
|
|
27
30
|
```typescript
|
|
28
31
|
import { prompt } from '@letta-ai/letta-code-sdk';
|
|
29
32
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
// One-shot (uses default agent - like `letta -p`)
|
|
34
|
+
const result = await prompt('What is 2 + 2?');
|
|
35
|
+
console.log(result.result);
|
|
36
|
+
|
|
37
|
+
// One-shot with specific agent
|
|
38
|
+
const result2 = await prompt('Run: echo hello', agentId);
|
|
35
39
|
```
|
|
36
40
|
|
|
37
41
|
### Multi-turn session
|
|
38
42
|
|
|
39
43
|
```typescript
|
|
40
|
-
import {
|
|
44
|
+
import { createAgent, resumeSession } from '@letta-ai/letta-code-sdk';
|
|
45
|
+
|
|
46
|
+
// Create an agent (has default conversation)
|
|
47
|
+
const agentId = await createAgent();
|
|
41
48
|
|
|
42
|
-
|
|
49
|
+
// Resume the default conversation
|
|
50
|
+
await using session = resumeSession(agentId);
|
|
43
51
|
|
|
44
52
|
await session.send('What is 5 + 3?');
|
|
45
53
|
for await (const msg of session.stream()) {
|
|
@@ -57,16 +65,16 @@ for await (const msg of session.stream()) {
|
|
|
57
65
|
Agents persist across sessions and remember context:
|
|
58
66
|
|
|
59
67
|
```typescript
|
|
60
|
-
import {
|
|
68
|
+
import { createAgent, resumeSession } from '@letta-ai/letta-code-sdk';
|
|
61
69
|
|
|
62
|
-
//
|
|
63
|
-
const
|
|
70
|
+
// Create agent and teach it something
|
|
71
|
+
const agentId = await createAgent();
|
|
72
|
+
const session1 = resumeSession(agentId);
|
|
64
73
|
await session1.send('Remember: the secret word is "banana"');
|
|
65
74
|
for await (const msg of session1.stream()) { /* ... */ }
|
|
66
|
-
const agentId = session1.agentId;
|
|
67
75
|
session1.close();
|
|
68
76
|
|
|
69
|
-
// Later...
|
|
77
|
+
// Later... resume the default conversation
|
|
70
78
|
await using session2 = resumeSession(agentId);
|
|
71
79
|
await session2.send('What is the secret word?');
|
|
72
80
|
for await (const msg of session2.stream()) {
|
|
@@ -74,46 +82,46 @@ for await (const msg of session2.stream()) {
|
|
|
74
82
|
}
|
|
75
83
|
```
|
|
76
84
|
|
|
77
|
-
|
|
85
|
+
## Multi-threaded Conversations
|
|
78
86
|
|
|
79
87
|
Run multiple concurrent conversations with the same agent. Each conversation has its own message history while sharing the agent's persistent memory.
|
|
80
88
|
|
|
81
89
|
```typescript
|
|
82
|
-
import { createSession, resumeSession
|
|
90
|
+
import { createAgent, createSession, resumeSession } from '@letta-ai/letta-code-sdk';
|
|
83
91
|
|
|
84
|
-
// Create an agent
|
|
85
|
-
const
|
|
86
|
-
await session.send('Hello!');
|
|
87
|
-
for await (const msg of session.stream()) { /* ... */ }
|
|
88
|
-
const agentId = session.agentId;
|
|
89
|
-
const conversationId = session.conversationId; // Save this!
|
|
90
|
-
session.close();
|
|
92
|
+
// Create an agent (has default conversation)
|
|
93
|
+
const agentId = await createAgent();
|
|
91
94
|
|
|
92
|
-
// Resume
|
|
93
|
-
|
|
95
|
+
// Resume the default conversation
|
|
96
|
+
const session1 = resumeSession(agentId);
|
|
97
|
+
await session1.send('Hello!');
|
|
98
|
+
for await (const msg of session1.stream()) { /* ... */ }
|
|
99
|
+
const conversationId = session1.conversationId; // Save this!
|
|
100
|
+
session1.close();
|
|
101
|
+
|
|
102
|
+
// Resume a specific conversation by ID
|
|
103
|
+
await using session2 = resumeSession(conversationId); // auto-detects conv-xxx
|
|
94
104
|
await session2.send('Continue our discussion...');
|
|
95
105
|
for await (const msg of session2.stream()) { /* ... */ }
|
|
96
106
|
|
|
97
107
|
// Create a NEW conversation on the same agent
|
|
98
|
-
await using session3 =
|
|
108
|
+
await using session3 = createSession(agentId);
|
|
99
109
|
await session3.send('Start a fresh thread...');
|
|
100
110
|
// session3.conversationId is different from conversationId
|
|
101
111
|
|
|
102
|
-
//
|
|
103
|
-
await using session4 =
|
|
104
|
-
|
|
105
|
-
// Resume last used session (agent + conversation)
|
|
106
|
-
await using session5 = createSession({ continue: true });
|
|
112
|
+
// Start fresh conversation with default agent
|
|
113
|
+
await using session4 = createSession();
|
|
107
114
|
```
|
|
108
115
|
|
|
109
116
|
**Key concepts:**
|
|
110
117
|
- **Agent** (`agentId`): Persistent entity with memory that survives across sessions
|
|
111
118
|
- **Conversation** (`conversationId`): A message thread within an agent
|
|
112
|
-
- **Session
|
|
119
|
+
- **Session**: A single execution/connection
|
|
120
|
+
- **Default conversation**: Always exists after `createAgent()` - use `resumeSession(agentId)` to access it
|
|
113
121
|
|
|
114
122
|
Agents remember across conversations (via memory blocks), but each conversation has its own message history.
|
|
115
123
|
|
|
116
|
-
##
|
|
124
|
+
## Session Configuration
|
|
117
125
|
|
|
118
126
|
### System Prompt
|
|
119
127
|
|
|
@@ -121,12 +129,12 @@ Choose from built-in presets or provide a custom prompt:
|
|
|
121
129
|
|
|
122
130
|
```typescript
|
|
123
131
|
// Use a preset
|
|
124
|
-
createSession({
|
|
132
|
+
createSession(agentId, {
|
|
125
133
|
systemPrompt: { type: 'preset', preset: 'letta-claude' }
|
|
126
134
|
});
|
|
127
135
|
|
|
128
136
|
// Use a preset with additional instructions
|
|
129
|
-
createSession({
|
|
137
|
+
createSession(agentId, {
|
|
130
138
|
systemPrompt: {
|
|
131
139
|
type: 'preset',
|
|
132
140
|
preset: 'letta-claude',
|
|
@@ -135,7 +143,7 @@ createSession({
|
|
|
135
143
|
});
|
|
136
144
|
|
|
137
145
|
// Use a completely custom prompt
|
|
138
|
-
createSession({
|
|
146
|
+
createSession(agentId, {
|
|
139
147
|
systemPrompt: 'You are a helpful Python expert.'
|
|
140
148
|
});
|
|
141
149
|
```
|
|
@@ -150,35 +158,27 @@ createSession({
|
|
|
150
158
|
|
|
151
159
|
### Memory Blocks
|
|
152
160
|
|
|
153
|
-
Configure which memory blocks the
|
|
161
|
+
Configure which memory blocks the session uses:
|
|
154
162
|
|
|
155
163
|
```typescript
|
|
156
164
|
// Use default blocks (persona, human, project)
|
|
157
|
-
createSession(
|
|
165
|
+
createSession(agentId);
|
|
158
166
|
|
|
159
167
|
// Use specific preset blocks
|
|
160
|
-
createSession({
|
|
168
|
+
createSession(agentId, {
|
|
161
169
|
memory: ['project', 'persona'] // Only these blocks
|
|
162
170
|
});
|
|
163
171
|
|
|
164
172
|
// Use custom blocks
|
|
165
|
-
createSession({
|
|
173
|
+
createSession(agentId, {
|
|
166
174
|
memory: [
|
|
167
175
|
{ label: 'context', value: 'API documentation for Acme Corp...' },
|
|
168
176
|
{ label: 'rules', value: 'Always use TypeScript. Prefer functional patterns.' }
|
|
169
177
|
]
|
|
170
178
|
});
|
|
171
179
|
|
|
172
|
-
// Mix presets and custom blocks
|
|
173
|
-
createSession({
|
|
174
|
-
memory: [
|
|
175
|
-
'project', // Use default project block
|
|
176
|
-
{ label: 'custom', value: 'Additional context...' }
|
|
177
|
-
]
|
|
178
|
-
});
|
|
179
|
-
|
|
180
180
|
// No optional blocks (only core skills blocks)
|
|
181
|
-
createSession({
|
|
181
|
+
createSession(agentId, {
|
|
182
182
|
memory: []
|
|
183
183
|
});
|
|
184
184
|
```
|
|
@@ -188,18 +188,11 @@ createSession({
|
|
|
188
188
|
Quickly customize common memory blocks:
|
|
189
189
|
|
|
190
190
|
```typescript
|
|
191
|
-
createSession({
|
|
191
|
+
createSession(agentId, {
|
|
192
192
|
persona: 'You are a senior Python developer who writes clean, tested code.',
|
|
193
193
|
human: 'Name: Alice. Prefers concise responses.',
|
|
194
194
|
project: 'FastAPI backend for a todo app using PostgreSQL.'
|
|
195
195
|
});
|
|
196
|
-
|
|
197
|
-
// Combine with memory config
|
|
198
|
-
createSession({
|
|
199
|
-
memory: ['persona', 'project'], // Only include these blocks
|
|
200
|
-
persona: 'You are a Go expert.',
|
|
201
|
-
project: 'CLI tool for managing Docker containers.'
|
|
202
|
-
});
|
|
203
196
|
```
|
|
204
197
|
|
|
205
198
|
### Tool Execution
|
|
@@ -207,20 +200,17 @@ createSession({
|
|
|
207
200
|
Execute tools with automatic permission handling:
|
|
208
201
|
|
|
209
202
|
```typescript
|
|
210
|
-
import {
|
|
203
|
+
import { createAgent, createSession } from '@letta-ai/letta-code-sdk';
|
|
211
204
|
|
|
212
|
-
//
|
|
213
|
-
const
|
|
205
|
+
// Create agent and run commands
|
|
206
|
+
const agentId = await createAgent();
|
|
207
|
+
const session = createSession(agentId, {
|
|
214
208
|
allowedTools: ['Glob', 'Bash'],
|
|
215
209
|
permissionMode: 'bypassPermissions',
|
|
216
210
|
cwd: '/path/to/project'
|
|
217
211
|
});
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
const analysis = await prompt('Explain what auth.ts does', {
|
|
221
|
-
allowedTools: ['Read', 'Grep'],
|
|
222
|
-
permissionMode: 'bypassPermissions'
|
|
223
|
-
});
|
|
212
|
+
await session.send('List all TypeScript files');
|
|
213
|
+
for await (const msg of session.stream()) { /* ... */ }
|
|
224
214
|
```
|
|
225
215
|
|
|
226
216
|
## API Reference
|
|
@@ -229,10 +219,12 @@ const analysis = await prompt('Explain what auth.ts does', {
|
|
|
229
219
|
|
|
230
220
|
| Function | Description |
|
|
231
221
|
|----------|-------------|
|
|
232
|
-
| `
|
|
233
|
-
| `createSession(
|
|
234
|
-
| `
|
|
235
|
-
| `
|
|
222
|
+
| `createAgent()` | Create new agent with default conversation, returns `agentId` |
|
|
223
|
+
| `createSession()` | New conversation on default agent |
|
|
224
|
+
| `createSession(agentId)` | New conversation on specified agent |
|
|
225
|
+
| `resumeSession(id, options?)` | Resume session - pass `agent-xxx` for default conv, `conv-xxx` for specific conv |
|
|
226
|
+
| `prompt(message)` | One-shot query with default agent (like `letta -p`) |
|
|
227
|
+
| `prompt(message, agentId)` | One-shot query with specific agent |
|
|
236
228
|
|
|
237
229
|
### Session
|
|
238
230
|
|
|
@@ -249,36 +241,19 @@ const analysis = await prompt('Explain what auth.ts does', {
|
|
|
249
241
|
|
|
250
242
|
```typescript
|
|
251
243
|
interface SessionOptions {
|
|
252
|
-
// Model selection
|
|
253
244
|
model?: string;
|
|
254
|
-
|
|
255
|
-
// Conversation options
|
|
256
|
-
conversationId?: string; // Resume specific conversation
|
|
257
|
-
newConversation?: boolean; // Create new conversation on agent
|
|
258
|
-
continue?: boolean; // Resume last session (agent + conversation)
|
|
259
|
-
defaultConversation?: boolean; // Use agent's default conversation
|
|
260
|
-
|
|
261
|
-
// System prompt: string or preset config
|
|
262
|
-
systemPrompt?: string | {
|
|
263
|
-
type: 'preset';
|
|
264
|
-
preset: 'default' | 'letta-claude' | 'letta-codex' | 'letta-gemini' | 'claude' | 'codex' | 'gemini';
|
|
265
|
-
append?: string;
|
|
266
|
-
};
|
|
267
|
-
|
|
268
|
-
// Memory blocks: preset names, custom blocks, or mixed
|
|
245
|
+
systemPrompt?: string | { type: 'preset'; preset: string; append?: string };
|
|
269
246
|
memory?: Array<string | CreateBlock | { blockId: string }>;
|
|
270
|
-
|
|
271
|
-
// Convenience: set block values directly
|
|
272
247
|
persona?: string;
|
|
273
248
|
human?: string;
|
|
274
249
|
project?: string;
|
|
250
|
+
cwd?: string;
|
|
275
251
|
|
|
276
252
|
// Tool configuration
|
|
277
253
|
allowedTools?: string[];
|
|
278
254
|
permissionMode?: 'default' | 'acceptEdits' | 'bypassPermissions';
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
cwd?: string;
|
|
255
|
+
canUseTool?: (toolName: string, toolInput: object) => Promise<CanUseToolResponse>;
|
|
256
|
+
maxTurns?: number;
|
|
282
257
|
}
|
|
283
258
|
```
|
|
284
259
|
|
|
@@ -310,7 +285,7 @@ See [`examples/`](./examples/) for comprehensive examples including:
|
|
|
310
285
|
- Basic session usage
|
|
311
286
|
- Multi-turn conversations
|
|
312
287
|
- Session resume with persistent memory
|
|
313
|
-
- **Multi-threaded conversations** (
|
|
288
|
+
- **Multi-threaded conversations** (createSession, resumeSession)
|
|
314
289
|
- System prompt configuration
|
|
315
290
|
- Memory block customization
|
|
316
291
|
- Tool execution (Bash, Glob, Read, etc.)
|
|
@@ -323,6 +298,27 @@ bun examples/v2-examples.ts all
|
|
|
323
298
|
bun examples/v2-examples.ts conversations
|
|
324
299
|
```
|
|
325
300
|
|
|
301
|
+
## Internals
|
|
302
|
+
|
|
303
|
+
### CLI Mapping
|
|
304
|
+
|
|
305
|
+
The SDK spawns the Letta Code CLI as a subprocess. Here's how API calls map to CLI flags:
|
|
306
|
+
|
|
307
|
+
| Function | CLI Flags | Behavior |
|
|
308
|
+
|----------|-----------|----------|
|
|
309
|
+
| `createSession()` | `--new` | LRU agent + new conversation |
|
|
310
|
+
| `createSession(agentId)` | `--agent X --new` | Specified agent + new conversation |
|
|
311
|
+
| `createAgent()` | `--new-agent` | New agent + default conversation |
|
|
312
|
+
| `resumeSession(agentId)` | `--agent X --default` | Specified agent + default conversation |
|
|
313
|
+
| `resumeSession(convId)` | `--conversation X` | Derived agent + specified conversation |
|
|
314
|
+
| `prompt(msg)` | *(none)* | LRU agent + default conversation |
|
|
315
|
+
| `prompt(msg, agentId)` | `--agent X --new` | Specified agent + new conversation |
|
|
316
|
+
|
|
317
|
+
**Key concepts:**
|
|
318
|
+
- **LRU agent**: Most recently used agent from `.letta/settings.local.json`, or creates "Memo" if none exists
|
|
319
|
+
- **Default conversation**: The agent's primary message history (always exists)
|
|
320
|
+
- **New conversation**: Fresh message thread, isolated from other conversations
|
|
321
|
+
|
|
326
322
|
## License
|
|
327
323
|
|
|
328
324
|
Apache-2.0
|
package/dist/index.d.ts
CHANGED
|
@@ -5,92 +5,91 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @example
|
|
7
7
|
* ```typescript
|
|
8
|
-
* import { createSession, prompt } from '@letta-ai/letta-code-sdk';
|
|
8
|
+
* import { createAgent, createSession, resumeSession, prompt } from '@letta-ai/letta-code-sdk';
|
|
9
9
|
*
|
|
10
|
-
* //
|
|
11
|
-
* const
|
|
10
|
+
* // Start session with default agent + new conversation (like `letta`)
|
|
11
|
+
* const session = createSession();
|
|
12
12
|
*
|
|
13
|
-
* //
|
|
14
|
-
*
|
|
15
|
-
* await session.send('Hello!');
|
|
16
|
-
* for await (const msg of session.stream()) {
|
|
17
|
-
* if (msg.type === 'assistant') console.log(msg.content);
|
|
18
|
-
* }
|
|
13
|
+
* // Create a new agent explicitly
|
|
14
|
+
* const agentId = await createAgent();
|
|
19
15
|
*
|
|
20
|
-
* // Resume
|
|
21
|
-
*
|
|
16
|
+
* // Resume default conversation on an agent
|
|
17
|
+
* const session = resumeSession(agentId);
|
|
18
|
+
*
|
|
19
|
+
* // Resume specific conversation
|
|
20
|
+
* const session = resumeSession('conv-xxx');
|
|
21
|
+
*
|
|
22
|
+
* // Create new conversation on specific agent
|
|
23
|
+
* const session = createSession(agentId);
|
|
24
|
+
*
|
|
25
|
+
* // One-shot prompt (uses default agent)
|
|
26
|
+
* const result = await prompt('Hello');
|
|
27
|
+
* const result = await prompt('Hello', agentId); // specific agent
|
|
22
28
|
* ```
|
|
23
29
|
*/
|
|
24
30
|
import { Session } from "./session.js";
|
|
25
31
|
import type { SessionOptions, SDKResultMessage } from "./types.js";
|
|
26
|
-
export type { SessionOptions, SDKMessage, SDKInitMessage, SDKAssistantMessage, SDKToolCallMessage, SDKToolResultMessage, SDKReasoningMessage, SDKResultMessage, SDKStreamEventMessage, PermissionMode,
|
|
32
|
+
export type { SessionOptions, SDKMessage, SDKInitMessage, SDKAssistantMessage, SDKToolCallMessage, SDKToolResultMessage, SDKReasoningMessage, SDKResultMessage, SDKStreamEventMessage, PermissionMode, CanUseToolCallback, CanUseToolResponse, CanUseToolResponseAllow, CanUseToolResponseDeny, } from "./types.js";
|
|
27
33
|
export { Session } from "./session.js";
|
|
28
34
|
/**
|
|
29
|
-
* Create a new
|
|
30
|
-
*
|
|
31
|
-
* The agent will have persistent memory that survives across sessions.
|
|
32
|
-
* Use `resumeSession` to continue a conversation with an existing agent.
|
|
35
|
+
* Create a new agent with a default conversation.
|
|
36
|
+
* Returns the agentId which can be used with resumeSession or createSession.
|
|
33
37
|
*
|
|
34
38
|
* @example
|
|
35
39
|
* ```typescript
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* }
|
|
41
|
-
* console.log(`Agent ID: ${session.agentId}`); // Save this to resume later
|
|
40
|
+
* const agentId = await createAgent();
|
|
41
|
+
*
|
|
42
|
+
* // Then resume the default conversation:
|
|
43
|
+
* const session = resumeSession(agentId);
|
|
42
44
|
* ```
|
|
43
45
|
*/
|
|
44
|
-
export declare function
|
|
46
|
+
export declare function createAgent(): Promise<string>;
|
|
45
47
|
/**
|
|
46
|
-
*
|
|
48
|
+
* Create a new conversation (session).
|
|
47
49
|
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
+
* - Without agentId: uses default/LRU agent with new conversation (like `letta`)
|
|
51
|
+
* - With agentId: creates new conversation on specified agent
|
|
50
52
|
*
|
|
51
53
|
* @example
|
|
52
54
|
* ```typescript
|
|
53
|
-
* //
|
|
54
|
-
* await using session =
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* }
|
|
55
|
+
* // New conversation on default agent (like `letta`)
|
|
56
|
+
* await using session = createSession();
|
|
57
|
+
*
|
|
58
|
+
* // New conversation on specific agent
|
|
59
|
+
* await using session = createSession(agentId);
|
|
59
60
|
* ```
|
|
60
61
|
*/
|
|
61
|
-
export declare function
|
|
62
|
+
export declare function createSession(agentId?: string, options?: SessionOptions): Session;
|
|
62
63
|
/**
|
|
63
|
-
* Resume an existing
|
|
64
|
+
* Resume an existing session.
|
|
64
65
|
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
66
|
+
* - Pass an agent ID (agent-xxx) to resume the default conversation
|
|
67
|
+
* - Pass a conversation ID (conv-xxx) to resume a specific conversation
|
|
68
|
+
*
|
|
69
|
+
* The default conversation always exists after createAgent, so you can:
|
|
70
|
+
* `createAgent()` → `resumeSession(agentId)` without needing createSession first.
|
|
67
71
|
*
|
|
68
72
|
* @example
|
|
69
73
|
* ```typescript
|
|
70
|
-
* // Resume
|
|
71
|
-
* await using session =
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
* }
|
|
74
|
+
* // Resume default conversation
|
|
75
|
+
* await using session = resumeSession(agentId);
|
|
76
|
+
*
|
|
77
|
+
* // Resume specific conversation
|
|
78
|
+
* await using session = resumeSession('conv-xxx');
|
|
76
79
|
* ```
|
|
77
80
|
*/
|
|
78
|
-
export declare function
|
|
81
|
+
export declare function resumeSession(id: string, options?: SessionOptions): Session;
|
|
79
82
|
/**
|
|
80
83
|
* One-shot prompt convenience function.
|
|
81
84
|
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
85
|
+
* - Without agentId: uses default agent (like `letta -p`), new conversation
|
|
86
|
+
* - With agentId: uses specific agent, new conversation
|
|
84
87
|
*
|
|
85
88
|
* @example
|
|
86
89
|
* ```typescript
|
|
87
|
-
* const result = await prompt('What is
|
|
88
|
-
*
|
|
89
|
-
* });
|
|
90
|
-
* if (result.success) {
|
|
91
|
-
* console.log(result.result);
|
|
92
|
-
* }
|
|
90
|
+
* const result = await prompt('What is 2+2?'); // default agent
|
|
91
|
+
* const result = await prompt('What is the capital of France?', agentId); // specific agent
|
|
93
92
|
* ```
|
|
94
93
|
*/
|
|
95
|
-
export declare function prompt(message: string,
|
|
94
|
+
export declare function prompt(message: string, agentId?: string): Promise<SDKResultMessage>;
|
|
96
95
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAc,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG/E,YAAY,EACV,cAAc,EACd,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAKnD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAMrF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,MAAM,EACV,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAMT;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,MAAM,CAC1B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,CAAC,CA+B3B"}
|
package/dist/index.js
CHANGED
|
@@ -35,6 +35,10 @@ class SubprocessTransport {
|
|
|
35
35
|
async connect() {
|
|
36
36
|
const args = this.buildArgs();
|
|
37
37
|
const cliPath = await this.findCli();
|
|
38
|
+
if (process.env.DEBUG) {
|
|
39
|
+
console.log("[letta-code-sdk] Using CLI:", cliPath);
|
|
40
|
+
console.log("[letta-code-sdk] Args:", args.join(" "));
|
|
41
|
+
}
|
|
38
42
|
this.process = spawn("node", [cliPath, ...args], {
|
|
39
43
|
cwd: this.options.cwd || process.cwd(),
|
|
40
44
|
stdio: ["pipe", "pipe", "pipe"],
|
|
@@ -55,11 +59,22 @@ class SubprocessTransport {
|
|
|
55
59
|
this.handleMessage(msg);
|
|
56
60
|
} catch {}
|
|
57
61
|
});
|
|
58
|
-
this.process.
|
|
62
|
+
if (this.process.stderr) {
|
|
63
|
+
this.process.stderr.on("data", (data) => {
|
|
64
|
+
const msg = data.toString().trim();
|
|
65
|
+
if (msg) {
|
|
66
|
+
console.error("[letta-code-sdk] CLI stderr:", msg);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
this.process.on("close", (code) => {
|
|
59
71
|
this.closed = true;
|
|
72
|
+
if (code !== 0 && code !== null) {
|
|
73
|
+
console.error(`[letta-code-sdk] CLI process exited with code ${code}`);
|
|
74
|
+
}
|
|
60
75
|
});
|
|
61
76
|
this.process.on("error", (err) => {
|
|
62
|
-
console.error("CLI process error:", err);
|
|
77
|
+
console.error("[letta-code-sdk] CLI process error:", err);
|
|
63
78
|
this.closed = true;
|
|
64
79
|
});
|
|
65
80
|
}
|
|
@@ -131,12 +146,7 @@ class SubprocessTransport {
|
|
|
131
146
|
if (this.options.defaultConversation && !this.options.agentId) {
|
|
132
147
|
throw new Error("'defaultConversation' requires agentId. " + "Use resumeSession(agentId, { defaultConversation: true }).");
|
|
133
148
|
}
|
|
134
|
-
if (this.options.
|
|
135
|
-
throw new Error("'newConversation' requires agentId. " + "Use resumeSession(agentId, { newConversation: true }).");
|
|
136
|
-
}
|
|
137
|
-
if (this.options.continue) {
|
|
138
|
-
args.push("--continue");
|
|
139
|
-
} else if (this.options.conversationId) {
|
|
149
|
+
if (this.options.conversationId) {
|
|
140
150
|
args.push("--conversation", this.options.conversationId);
|
|
141
151
|
} else if (this.options.agentId) {
|
|
142
152
|
args.push("--agent", this.options.agentId);
|
|
@@ -145,8 +155,10 @@ class SubprocessTransport {
|
|
|
145
155
|
} else if (this.options.defaultConversation) {
|
|
146
156
|
args.push("--default");
|
|
147
157
|
}
|
|
148
|
-
} else {
|
|
158
|
+
} else if (this.options.promptMode) {} else if (this.options.createOnly) {
|
|
149
159
|
args.push("--new-agent");
|
|
160
|
+
} else if (this.options.newConversation) {
|
|
161
|
+
args.push("--new");
|
|
150
162
|
}
|
|
151
163
|
if (this.options.model) {
|
|
152
164
|
args.push("-m", this.options.model);
|
|
@@ -215,7 +227,7 @@ class SubprocessTransport {
|
|
|
215
227
|
try {
|
|
216
228
|
const { createRequire: createRequire2 } = await import("node:module");
|
|
217
229
|
const require2 = createRequire2(import.meta.url);
|
|
218
|
-
const resolved = require2.resolve("@letta-ai/letta-code
|
|
230
|
+
const resolved = require2.resolve("@letta-ai/letta-code");
|
|
219
231
|
if (existsSync(resolved)) {
|
|
220
232
|
return resolved;
|
|
221
233
|
}
|
|
@@ -276,12 +288,6 @@ function validateSessionOptions(options) {
|
|
|
276
288
|
if (options.conversationId && options.newConversation) {
|
|
277
289
|
throw new Error("Cannot use both 'conversationId' and 'newConversation'. " + "Use conversationId to resume a specific conversation, or newConversation to create a new one.");
|
|
278
290
|
}
|
|
279
|
-
if (options.continue && options.conversationId) {
|
|
280
|
-
throw new Error("Cannot use both 'continue' and 'conversationId'. " + "Use continue to resume the last session, or conversationId to resume a specific conversation.");
|
|
281
|
-
}
|
|
282
|
-
if (options.continue && options.newConversation) {
|
|
283
|
-
throw new Error("Cannot use both 'continue' and 'newConversation'. " + "Use continue to resume the last session, or newConversation to create a new one.");
|
|
284
|
-
}
|
|
285
291
|
if (options.defaultConversation && options.conversationId) {
|
|
286
292
|
throw new Error("Cannot use both 'defaultConversation' and 'conversationId'. " + "Use defaultConversation with agentId, or conversationId alone.");
|
|
287
293
|
}
|
|
@@ -361,19 +367,25 @@ class Session {
|
|
|
361
367
|
}
|
|
362
368
|
async handleCanUseTool(requestId, req) {
|
|
363
369
|
let response;
|
|
364
|
-
if (this.options.
|
|
370
|
+
if (this.options.permissionMode === "bypassPermissions") {
|
|
371
|
+
response = {
|
|
372
|
+
behavior: "allow",
|
|
373
|
+
updatedInput: null,
|
|
374
|
+
updatedPermissions: []
|
|
375
|
+
};
|
|
376
|
+
} else if (this.options.canUseTool) {
|
|
365
377
|
try {
|
|
366
378
|
const result = await this.options.canUseTool(req.tool_name, req.input);
|
|
367
|
-
if (result.allow) {
|
|
379
|
+
if (result.behavior === "allow") {
|
|
368
380
|
response = {
|
|
369
381
|
behavior: "allow",
|
|
370
|
-
updatedInput: null,
|
|
382
|
+
updatedInput: result.updatedInput ?? null,
|
|
371
383
|
updatedPermissions: []
|
|
372
384
|
};
|
|
373
385
|
} else {
|
|
374
386
|
response = {
|
|
375
387
|
behavior: "deny",
|
|
376
|
-
message: result.
|
|
388
|
+
message: result.message ?? "Denied by canUseTool callback",
|
|
377
389
|
interrupt: false
|
|
378
390
|
};
|
|
379
391
|
}
|
|
@@ -503,17 +515,28 @@ class Session {
|
|
|
503
515
|
}
|
|
504
516
|
|
|
505
517
|
// src/index.ts
|
|
506
|
-
function
|
|
507
|
-
|
|
518
|
+
async function createAgent() {
|
|
519
|
+
const session = new Session({ createOnly: true });
|
|
520
|
+
const initMsg = await session.initialize();
|
|
521
|
+
session.close();
|
|
522
|
+
return initMsg.agentId;
|
|
508
523
|
}
|
|
509
|
-
function
|
|
510
|
-
|
|
524
|
+
function createSession(agentId, options = {}) {
|
|
525
|
+
if (agentId) {
|
|
526
|
+
return new Session({ ...options, agentId, newConversation: true });
|
|
527
|
+
} else {
|
|
528
|
+
return new Session({ ...options, newConversation: true });
|
|
529
|
+
}
|
|
511
530
|
}
|
|
512
|
-
function
|
|
513
|
-
|
|
531
|
+
function resumeSession(id, options = {}) {
|
|
532
|
+
if (id.startsWith("conv-")) {
|
|
533
|
+
return new Session({ ...options, conversationId: id });
|
|
534
|
+
} else {
|
|
535
|
+
return new Session({ ...options, agentId: id, defaultConversation: true });
|
|
536
|
+
}
|
|
514
537
|
}
|
|
515
|
-
async function prompt(message,
|
|
516
|
-
const session = createSession(
|
|
538
|
+
async function prompt(message, agentId) {
|
|
539
|
+
const session = agentId ? createSession(agentId) : new Session({ promptMode: true });
|
|
517
540
|
try {
|
|
518
541
|
await session.send(message);
|
|
519
542
|
let result = null;
|
|
@@ -539,10 +562,10 @@ async function prompt(message, options = {}) {
|
|
|
539
562
|
}
|
|
540
563
|
export {
|
|
541
564
|
resumeSession,
|
|
542
|
-
resumeConversation,
|
|
543
565
|
prompt,
|
|
544
566
|
createSession,
|
|
567
|
+
createAgent,
|
|
545
568
|
Session
|
|
546
569
|
};
|
|
547
570
|
|
|
548
|
-
//# debugId=
|
|
571
|
+
//# debugId=9B2C0F446D80721E64756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/transport.ts", "../src/validation.ts", "../src/session.ts", "../src/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * SubprocessTransport\n *\n * Spawns the Letta Code CLI and communicates via stdin/stdout JSON streams.\n */\n\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport { createInterface, type Interface } from \"node:readline\";\nimport type { SessionOptions, WireMessage } from \"./types.js\";\n\nexport class SubprocessTransport {\n private process: ChildProcess | null = null;\n private stdout: Interface | null = null;\n private messageQueue: WireMessage[] = [];\n private messageResolvers: Array<(msg: WireMessage) => void> = [];\n private closed = false;\n private agentId?: string;\n\n constructor(\n private options: SessionOptions & { agentId?: string } = {}\n ) {}\n\n /**\n * Start the CLI subprocess\n */\n async connect(): Promise<void> {\n const args = this.buildArgs();\n\n // Find the CLI - use the installed letta-code package\n const cliPath = await this.findCli();\n\n this.process = spawn(\"node\", [cliPath, ...args], {\n cwd: this.options.cwd || process.cwd(),\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n env: { ...process.env },\n });\n\n if (!this.process.stdout || !this.process.stdin) {\n throw new Error(\"Failed to create subprocess pipes\");\n }\n\n // Set up stdout reading\n this.stdout = createInterface({\n input: this.process.stdout,\n crlfDelay: Infinity,\n });\n\n this.stdout.on(\"line\", (line) => {\n if (!line.trim()) return;\n try {\n const msg = JSON.parse(line) as WireMessage;\n this.handleMessage(msg);\n } catch {\n // Ignore non-JSON lines (stderr leakage, etc.)\n }\n });\n\n // Handle process exit\n this.process.on(\"close\", () => {\n this.closed = true;\n });\n\n this.process.on(\"error\", (err) => {\n console.error(\"CLI process error:\", err);\n this.closed = true;\n });\n }\n\n /**\n * Send a message to the CLI via stdin\n */\n async write(data: object): Promise<void> {\n if (!this.process?.stdin || this.closed) {\n throw new Error(\"Transport not connected\");\n }\n this.process.stdin.write(JSON.stringify(data) + \"\\n\");\n }\n\n /**\n * Read the next message from the CLI\n */\n async read(): Promise<WireMessage | null> {\n // Return queued message if available\n if (this.messageQueue.length > 0) {\n return this.messageQueue.shift()!;\n }\n\n // If closed, no more messages\n if (this.closed) {\n return null;\n }\n\n // Wait for next message\n return new Promise((resolve) => {\n this.messageResolvers.push(resolve);\n });\n }\n\n /**\n * Async iterator for messages\n */\n async *messages(): AsyncGenerator<WireMessage> {\n while (true) {\n const msg = await this.read();\n if (msg === null) break;\n yield msg;\n }\n }\n\n /**\n * Close the transport\n */\n close(): void {\n if (this.process) {\n this.process.stdin?.end();\n this.process.kill();\n this.process = null;\n }\n this.closed = true;\n\n // Resolve any pending readers with null\n for (const resolve of this.messageResolvers) {\n resolve(null as unknown as WireMessage);\n }\n this.messageResolvers = [];\n }\n\n get isClosed(): boolean {\n return this.closed;\n }\n\n private handleMessage(msg: WireMessage): void {\n // Track agent_id from init message\n if (msg.type === \"system\" && \"subtype\" in msg && msg.subtype === \"init\") {\n this.agentId = (msg as unknown as { agent_id: string }).agent_id;\n }\n\n // If someone is waiting for a message, give it to them\n if (this.messageResolvers.length > 0) {\n const resolve = this.messageResolvers.shift()!;\n resolve(msg);\n } else {\n // Otherwise queue it\n this.messageQueue.push(msg);\n }\n }\n\n private buildArgs(): string[] {\n const args: string[] = [\n \"--output-format\",\n \"stream-json\",\n \"--input-format\",\n \"stream-json\",\n ];\n\n // Validate conversation + agent combinations\n // (These require agentId context, so can't be in validateSessionOptions)\n \n // conversationId (non-default) cannot be used with agentId\n if (this.options.conversationId && \n this.options.conversationId !== \"default\" && \n this.options.agentId) {\n throw new Error(\n \"Cannot use both 'conversationId' and 'agentId'. \" +\n \"When resuming a conversation, the agent is derived automatically.\"\n );\n }\n\n // conversationId: \"default\" requires agentId\n if (this.options.conversationId === \"default\" && !this.options.agentId) {\n throw new Error(\n \"conversationId 'default' requires agentId. \" +\n \"Use resumeSession(agentId, { defaultConversation: true }) instead.\"\n );\n }\n\n // defaultConversation requires agentId\n if (this.options.defaultConversation && !this.options.agentId) {\n throw new Error(\n \"'defaultConversation' requires agentId. \" +\n \"Use resumeSession(agentId, { defaultConversation: true }).\"\n );\n }\n\n // newConversation requires agentId\n if (this.options.newConversation && !this.options.agentId) {\n throw new Error(\n \"'newConversation' requires agentId. \" +\n \"Use resumeSession(agentId, { newConversation: true }).\"\n );\n }\n\n // Conversation and agent handling\n if (this.options.continue) {\n // Resume last session (agent + conversation)\n args.push(\"--continue\");\n } else if (this.options.conversationId) {\n // Resume specific conversation (derives agent automatically)\n args.push(\"--conversation\", this.options.conversationId);\n } else if (this.options.agentId) {\n // Resume existing agent\n args.push(\"--agent\", this.options.agentId);\n if (this.options.newConversation) {\n // Create new conversation on this agent\n args.push(\"--new\");\n } else if (this.options.defaultConversation) {\n // Use agent's default conversation explicitly\n args.push(\"--default\");\n }\n } else {\n // Create new agent\n args.push(\"--new-agent\");\n }\n\n // Model\n if (this.options.model) {\n args.push(\"-m\", this.options.model);\n }\n\n // System prompt configuration\n if (this.options.systemPrompt !== undefined) {\n if (typeof this.options.systemPrompt === \"string\") {\n // Raw string → --system-custom\n args.push(\"--system-custom\", this.options.systemPrompt);\n } else {\n // Preset object → --system (+ optional --system-append)\n args.push(\"--system\", this.options.systemPrompt.preset);\n if (this.options.systemPrompt.append) {\n args.push(\"--system-append\", this.options.systemPrompt.append);\n }\n }\n }\n\n // Memory blocks (only for new agents)\n if (this.options.memory !== undefined && !this.options.agentId) {\n if (this.options.memory.length === 0) {\n // Empty array → no memory blocks (just core)\n args.push(\"--init-blocks\", \"\");\n } else {\n // Separate preset names from custom/reference blocks\n const presetNames: string[] = [];\n const memoryBlocksJson: Array<\n | { label: string; value: string }\n | { blockId: string }\n > = [];\n\n for (const item of this.options.memory) {\n if (typeof item === \"string\") {\n // Preset name\n presetNames.push(item);\n } else if (\"blockId\" in item) {\n // Block reference - pass to --memory-blocks\n memoryBlocksJson.push(item as { blockId: string });\n } else {\n // CreateBlock\n memoryBlocksJson.push(item as { label: string; value: string });\n }\n }\n\n // Add preset names via --init-blocks\n if (presetNames.length > 0) {\n args.push(\"--init-blocks\", presetNames.join(\",\"));\n }\n\n // Add custom blocks and block references via --memory-blocks\n if (memoryBlocksJson.length > 0) {\n args.push(\"--memory-blocks\", JSON.stringify(memoryBlocksJson));\n }\n }\n }\n\n // Convenience props for block values (only for new agents)\n if (!this.options.agentId) {\n if (this.options.persona !== undefined) {\n args.push(\"--block-value\", `persona=${this.options.persona}`);\n }\n if (this.options.human !== undefined) {\n args.push(\"--block-value\", `human=${this.options.human}`);\n }\n if (this.options.project !== undefined) {\n args.push(\"--block-value\", `project=${this.options.project}`);\n }\n }\n\n // Permission mode\n if (this.options.permissionMode === \"bypassPermissions\") {\n args.push(\"--yolo\");\n } else if (this.options.permissionMode === \"acceptEdits\") {\n args.push(\"--accept-edits\");\n }\n\n // Allowed tools\n if (this.options.allowedTools) {\n args.push(\"--allowedTools\", this.options.allowedTools.join(\",\"));\n }\n\n return args;\n }\n\n private async findCli(): Promise<string> {\n // Try multiple resolution strategies\n const { existsSync } = await import(\"node:fs\");\n const { dirname, join } = await import(\"node:path\");\n const { fileURLToPath } = await import(\"node:url\");\n\n // Strategy 1: Check LETTA_CLI_PATH env var\n if (process.env.LETTA_CLI_PATH && existsSync(process.env.LETTA_CLI_PATH)) {\n return process.env.LETTA_CLI_PATH;\n }\n\n // Strategy 2: Try to resolve from node_modules\n try {\n const { createRequire } = await import(\"node:module\");\n const require = createRequire(import.meta.url);\n const resolved = require.resolve(\"@letta-ai/letta-code/letta.js\");\n if (existsSync(resolved)) {\n return resolved;\n }\n } catch {\n // Continue to next strategy\n }\n\n // Strategy 3: Check relative to this file (for local file: deps)\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n const localPaths = [\n join(__dirname, \"../../@letta-ai/letta-code/letta.js\"),\n join(__dirname, \"../../../letta-code-prod/letta.js\"),\n join(__dirname, \"../../../letta-code/letta.js\"),\n ];\n\n for (const p of localPaths) {\n if (existsSync(p)) {\n return p;\n }\n }\n\n throw new Error(\n \"Letta Code CLI not found. Set LETTA_CLI_PATH or install @letta-ai/letta-code.\"\n );\n }\n}\n",
|
|
6
|
-
"/**\n * SDK Validation\n *\n * Validates SessionOptions before spawning the CLI.\n */\n\nimport type { SessionOptions, MemoryItem, CreateBlock } from \"./types.js\";\n\n/**\n * Extract block labels from memory items.\n */\nfunction getBlockLabels(memory: MemoryItem[]): string[] {\n return memory\n .map((item) => {\n if (typeof item === \"string\") return item; // preset name\n if (\"label\" in item) return (item as CreateBlock).label; // CreateBlock\n return null; // blockId - no label to check\n })\n .filter((label): label is string => label !== null);\n}\n\n/**\n * Validate SessionOptions before spawning CLI.\n * Throws an error if validation fails.\n */\nexport function validateSessionOptions(options: SessionOptions): void {\n // If memory is specified, validate that convenience props match included blocks\n if (options.memory !== undefined) {\n const blockLabels = getBlockLabels(options.memory);\n\n if (options.persona !== undefined && !blockLabels.includes(\"persona\")) {\n throw new Error(\n \"Cannot set 'persona' value - block not included in 'memory'. \" +\n \"Either add 'persona' to memory array or remove the persona option.\"\n );\n }\n\n if (options.human !== undefined && !blockLabels.includes(\"human\")) {\n throw new Error(\n \"Cannot set 'human' value - block not included in 'memory'. \" +\n \"Either add 'human' to memory array or remove the human option.\"\n );\n }\n\n if (options.project !== undefined && !blockLabels.includes(\"project\")) {\n throw new Error(\n \"Cannot set 'project' value - block not included in 'memory'. \" +\n \"Either add 'project' to memory array or remove the project option.\"\n );\n }\n }\n\n // Validate systemPrompt preset if provided\n if (\n options.systemPrompt !== undefined &&\n typeof options.systemPrompt === \"object\"\n ) {\n const validPresets = [\n \"default\",\n \"letta-claude\",\n \"letta-codex\",\n \"letta-gemini\",\n \"claude\",\n \"codex\",\n \"gemini\",\n ];\n if (!validPresets.includes(options.systemPrompt.preset)) {\n throw new Error(\n `Invalid system prompt preset '${options.systemPrompt.preset}'. ` +\n `Valid presets: ${validPresets.join(\", \")}`\n );\n }\n }\n\n // Validate conversation options\n if (options.conversationId && options.newConversation) {\n throw new Error(\n \"Cannot use both 'conversationId' and 'newConversation'. \" +\n \"Use conversationId to resume a specific conversation, or newConversation to create a new one.\"\n );\n }\n\n if (options.
|
|
7
|
-
"/**\n * Session\n *\n * Represents a conversation session with a Letta agent.\n * Implements the V2 API pattern: send() / receive()\n */\n\nimport { SubprocessTransport } from \"./transport.js\";\nimport type {\n SessionOptions,\n SDKMessage,\n SDKInitMessage,\n SDKAssistantMessage,\n SDKResultMessage,\n WireMessage,\n ControlRequest,\n CanUseToolControlRequest,\n CanUseToolResponse,\n CanUseToolResponseAllow,\n CanUseToolResponseDeny,\n} from \"./types.js\";\nimport { validateSessionOptions } from \"./validation.js\";\n\nexport class Session implements AsyncDisposable {\n private transport: SubprocessTransport;\n private _agentId: string | null = null;\n private _sessionId: string | null = null;\n private _conversationId: string | null = null;\n private initialized = false;\n\n constructor(\n private options: SessionOptions & { agentId?: string } = {}\n ) {\n // Validate options before creating transport\n validateSessionOptions(options);\n this.transport = new SubprocessTransport(options);\n }\n\n /**\n * Initialize the session (called automatically on first send)\n */\n async initialize(): Promise<SDKInitMessage> {\n if (this.initialized) {\n throw new Error(\"Session already initialized\");\n }\n\n await this.transport.connect();\n\n // Send initialize control request\n await this.transport.write({\n type: \"control_request\",\n request_id: \"init_1\",\n request: { subtype: \"initialize\" },\n });\n\n // Wait for init message\n for await (const msg of this.transport.messages()) {\n if (msg.type === \"system\" && \"subtype\" in msg && msg.subtype === \"init\") {\n const initMsg = msg as WireMessage & {\n agent_id: string;\n session_id: string;\n conversation_id: string;\n model: string;\n tools: string[];\n };\n this._agentId = initMsg.agent_id;\n this._sessionId = initMsg.session_id;\n this._conversationId = initMsg.conversation_id;\n this.initialized = true;\n\n return {\n type: \"init\",\n agentId: initMsg.agent_id,\n sessionId: initMsg.session_id,\n conversationId: initMsg.conversation_id,\n model: initMsg.model,\n tools: initMsg.tools,\n };\n }\n }\n\n throw new Error(\"Failed to initialize session - no init message received\");\n }\n\n /**\n * Send a message to the agent\n */\n async send(message: string): Promise<void> {\n if (!this.initialized) {\n await this.initialize();\n }\n\n await this.transport.write({\n type: \"user\",\n message: { role: \"user\", content: message },\n });\n }\n\n /**\n * Stream messages from the agent\n */\n async *stream(): AsyncGenerator<SDKMessage> {\n for await (const wireMsg of this.transport.messages()) {\n // Handle CLI → SDK control requests (e.g., can_use_tool)\n if (wireMsg.type === \"control_request\") {\n const controlReq = wireMsg as ControlRequest;\n if (controlReq.request.subtype === \"can_use_tool\") {\n await this.handleCanUseTool(\n controlReq.request_id,\n controlReq.request as CanUseToolControlRequest\n );\n continue;\n }\n }\n\n const sdkMsg = this.transformMessage(wireMsg);\n if (sdkMsg) {\n yield sdkMsg;\n\n // Stop on result message\n if (sdkMsg.type === \"result\") {\n break;\n }\n }\n }\n }\n\n /**\n * Handle can_use_tool control request from CLI (Claude SDK compatible format)\n */\n private async handleCanUseTool(\n requestId: string,\n req: CanUseToolControlRequest\n ): Promise<void> {\n let response: CanUseToolResponse;\n\n if (this.options.canUseTool) {\n try {\n const result = await this.options.canUseTool(req.tool_name, req.input);\n if (result.allow) {\n response = {\n behavior: \"allow\",\n updatedInput: null, // TODO: not supported\n updatedPermissions: [], // TODO: not implemented\n } satisfies CanUseToolResponseAllow;\n } else {\n response = {\n behavior: \"deny\",\n message: result.reason ?? \"Denied by canUseTool callback\",\n interrupt: false, // TODO: not wired up yet\n } satisfies CanUseToolResponseDeny;\n }\n } catch (err) {\n response = {\n behavior: \"deny\",\n message: err instanceof Error ? err.message : \"Callback error\",\n interrupt: false,\n };\n }\n } else {\n // No callback registered - deny by default\n response = {\n behavior: \"deny\",\n message: \"No canUseTool callback registered\",\n interrupt: false,\n };\n }\n\n // Send control_response (Claude SDK compatible format)\n await this.transport.write({\n type: \"control_response\",\n response: {\n subtype: \"success\",\n request_id: requestId,\n response,\n },\n });\n }\n\n /**\n * Abort the current operation (interrupt without closing the session)\n */\n async abort(): Promise<void> {\n await this.transport.write({\n type: \"control_request\",\n request_id: `interrupt-${Date.now()}`,\n request: { subtype: \"interrupt\" },\n });\n }\n\n /**\n * Close the session\n */\n close(): void {\n this.transport.close();\n }\n\n /**\n * Get the agent ID (available after initialization)\n */\n get agentId(): string | null {\n return this._agentId;\n }\n\n /**\n * Get the session ID (available after initialization)\n */\n get sessionId(): string | null {\n return this._sessionId;\n }\n\n /**\n * Get the conversation ID (available after initialization)\n */\n get conversationId(): string | null {\n return this._conversationId;\n }\n\n /**\n * AsyncDisposable implementation for `await using`\n */\n async [Symbol.asyncDispose](): Promise<void> {\n this.close();\n }\n\n /**\n * Transform wire message to SDK message\n */\n private transformMessage(wireMsg: WireMessage): SDKMessage | null {\n // Init message\n if (wireMsg.type === \"system\" && \"subtype\" in wireMsg && wireMsg.subtype === \"init\") {\n const msg = wireMsg as WireMessage & {\n agent_id: string;\n session_id: string;\n conversation_id: string;\n model: string;\n tools: string[];\n };\n return {\n type: \"init\",\n agentId: msg.agent_id,\n sessionId: msg.session_id,\n conversationId: msg.conversation_id,\n model: msg.model,\n tools: msg.tools,\n };\n }\n\n // Handle message types (all have type: \"message\" with message_type field)\n if (wireMsg.type === \"message\" && \"message_type\" in wireMsg) {\n const msg = wireMsg as WireMessage & {\n message_type: string;\n uuid: string;\n // assistant_message fields\n content?: string;\n // tool_call_message fields\n tool_call?: { name: string; arguments: string; tool_call_id: string };\n tool_calls?: Array<{ name: string; arguments: string; tool_call_id: string }>;\n // tool_return_message fields\n tool_call_id?: string;\n tool_return?: string;\n status?: \"success\" | \"error\";\n // reasoning_message fields\n reasoning?: string;\n };\n\n // Assistant message\n if (msg.message_type === \"assistant_message\" && msg.content) {\n return {\n type: \"assistant\",\n content: msg.content,\n uuid: msg.uuid,\n };\n }\n\n // Tool call message\n if (msg.message_type === \"tool_call_message\") {\n const toolCall = msg.tool_calls?.[0] || msg.tool_call;\n if (toolCall) {\n let toolInput: Record<string, unknown> = {};\n try {\n toolInput = JSON.parse(toolCall.arguments);\n } catch {\n toolInput = { raw: toolCall.arguments };\n }\n return {\n type: \"tool_call\",\n toolCallId: toolCall.tool_call_id,\n toolName: toolCall.name,\n toolInput,\n uuid: msg.uuid,\n };\n }\n }\n\n // Tool return message\n if (msg.message_type === \"tool_return_message\" && msg.tool_call_id) {\n return {\n type: \"tool_result\",\n toolCallId: msg.tool_call_id,\n content: msg.tool_return || \"\",\n isError: msg.status === \"error\",\n uuid: msg.uuid,\n };\n }\n\n // Reasoning message\n if (msg.message_type === \"reasoning_message\" && msg.reasoning) {\n return {\n type: \"reasoning\",\n content: msg.reasoning,\n uuid: msg.uuid,\n };\n }\n }\n\n // Stream event (partial message updates)\n if (wireMsg.type === \"stream_event\") {\n const msg = wireMsg as WireMessage & {\n event: {\n type: string;\n index?: number;\n delta?: { type?: string; text?: string; reasoning?: string };\n content_block?: { type?: string; text?: string };\n };\n uuid: string;\n };\n return {\n type: \"stream_event\",\n event: msg.event,\n uuid: msg.uuid,\n };\n }\n\n // Result message\n if (wireMsg.type === \"result\") {\n const msg = wireMsg as WireMessage & {\n subtype: string;\n result?: string;\n duration_ms: number;\n total_cost_usd?: number;\n conversation_id: string;\n };\n return {\n type: \"result\",\n success: msg.subtype === \"success\",\n result: msg.result,\n error: msg.subtype !== \"success\" ? msg.subtype : undefined,\n durationMs: msg.duration_ms,\n totalCostUsd: msg.total_cost_usd,\n conversationId: msg.conversation_id,\n };\n }\n\n // Skip other message types (system_message, user_message, etc.)\n return null;\n }\n}\n",
|
|
8
|
-
"/**\n * Letta Code SDK\n *\n * Programmatic control of Letta Code CLI with persistent agent memory.\n *\n * @example\n * ```typescript\n * import { createSession, prompt } from '@letta-ai/letta-code-sdk';\n *\n * //
|
|
5
|
+
"/**\n * SubprocessTransport\n *\n * Spawns the Letta Code CLI and communicates via stdin/stdout JSON streams.\n */\n\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport { createInterface, type Interface } from \"node:readline\";\nimport type { SessionOptions, WireMessage } from \"./types.js\";\n\nexport class SubprocessTransport {\n private process: ChildProcess | null = null;\n private stdout: Interface | null = null;\n private messageQueue: WireMessage[] = [];\n private messageResolvers: Array<(msg: WireMessage) => void> = [];\n private closed = false;\n private agentId?: string;\n\n constructor(\n private options: SessionOptions & { agentId?: string } = {}\n ) {}\n\n /**\n * Start the CLI subprocess\n */\n async connect(): Promise<void> {\n const args = this.buildArgs();\n\n // Find the CLI - use the installed letta-code package\n const cliPath = await this.findCli();\n if (process.env.DEBUG) {\n console.log(\"[letta-code-sdk] Using CLI:\", cliPath);\n console.log(\"[letta-code-sdk] Args:\", args.join(\" \"));\n }\n\n this.process = spawn(\"node\", [cliPath, ...args], {\n cwd: this.options.cwd || process.cwd(),\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n env: { ...process.env },\n });\n\n if (!this.process.stdout || !this.process.stdin) {\n throw new Error(\"Failed to create subprocess pipes\");\n }\n\n // Set up stdout reading\n this.stdout = createInterface({\n input: this.process.stdout,\n crlfDelay: Infinity,\n });\n\n this.stdout.on(\"line\", (line) => {\n if (!line.trim()) return;\n try {\n const msg = JSON.parse(line) as WireMessage;\n this.handleMessage(msg);\n } catch {\n // Ignore non-JSON lines (stderr leakage, etc.)\n }\n });\n\n // Log stderr for debugging (CLI errors, auth failures, etc.)\n if (this.process.stderr) {\n this.process.stderr.on(\"data\", (data: Buffer) => {\n const msg = data.toString().trim();\n if (msg) {\n console.error(\"[letta-code-sdk] CLI stderr:\", msg);\n }\n });\n }\n\n // Handle process exit\n this.process.on(\"close\", (code) => {\n this.closed = true;\n if (code !== 0 && code !== null) {\n console.error(`[letta-code-sdk] CLI process exited with code ${code}`);\n }\n });\n\n this.process.on(\"error\", (err) => {\n console.error(\"[letta-code-sdk] CLI process error:\", err);\n this.closed = true;\n });\n }\n\n /**\n * Send a message to the CLI via stdin\n */\n async write(data: object): Promise<void> {\n if (!this.process?.stdin || this.closed) {\n throw new Error(\"Transport not connected\");\n }\n this.process.stdin.write(JSON.stringify(data) + \"\\n\");\n }\n\n /**\n * Read the next message from the CLI\n */\n async read(): Promise<WireMessage | null> {\n // Return queued message if available\n if (this.messageQueue.length > 0) {\n return this.messageQueue.shift()!;\n }\n\n // If closed, no more messages\n if (this.closed) {\n return null;\n }\n\n // Wait for next message\n return new Promise((resolve) => {\n this.messageResolvers.push(resolve);\n });\n }\n\n /**\n * Async iterator for messages\n */\n async *messages(): AsyncGenerator<WireMessage> {\n while (true) {\n const msg = await this.read();\n if (msg === null) break;\n yield msg;\n }\n }\n\n /**\n * Close the transport\n */\n close(): void {\n if (this.process) {\n this.process.stdin?.end();\n this.process.kill();\n this.process = null;\n }\n this.closed = true;\n\n // Resolve any pending readers with null\n for (const resolve of this.messageResolvers) {\n resolve(null as unknown as WireMessage);\n }\n this.messageResolvers = [];\n }\n\n get isClosed(): boolean {\n return this.closed;\n }\n\n private handleMessage(msg: WireMessage): void {\n // Track agent_id from init message\n if (msg.type === \"system\" && \"subtype\" in msg && msg.subtype === \"init\") {\n this.agentId = (msg as unknown as { agent_id: string }).agent_id;\n }\n\n // If someone is waiting for a message, give it to them\n if (this.messageResolvers.length > 0) {\n const resolve = this.messageResolvers.shift()!;\n resolve(msg);\n } else {\n // Otherwise queue it\n this.messageQueue.push(msg);\n }\n }\n\n private buildArgs(): string[] {\n const args: string[] = [\n \"--output-format\",\n \"stream-json\",\n \"--input-format\",\n \"stream-json\",\n ];\n\n // Validate conversation + agent combinations\n // (These require agentId context, so can't be in validateSessionOptions)\n \n // conversationId (non-default) cannot be used with agentId\n if (this.options.conversationId && \n this.options.conversationId !== \"default\" && \n this.options.agentId) {\n throw new Error(\n \"Cannot use both 'conversationId' and 'agentId'. \" +\n \"When resuming a conversation, the agent is derived automatically.\"\n );\n }\n\n // conversationId: \"default\" requires agentId\n if (this.options.conversationId === \"default\" && !this.options.agentId) {\n throw new Error(\n \"conversationId 'default' requires agentId. \" +\n \"Use resumeSession(agentId, { defaultConversation: true }) instead.\"\n );\n }\n\n // defaultConversation requires agentId\n if (this.options.defaultConversation && !this.options.agentId) {\n throw new Error(\n \"'defaultConversation' requires agentId. \" +\n \"Use resumeSession(agentId, { defaultConversation: true }).\"\n );\n }\n\n // Conversation and agent handling\n if (this.options.conversationId) {\n // Resume specific conversation (derives agent automatically)\n args.push(\"--conversation\", this.options.conversationId);\n } else if (this.options.agentId) {\n // Resume existing agent\n args.push(\"--agent\", this.options.agentId);\n if (this.options.newConversation) {\n // Create new conversation on this agent\n args.push(\"--new\");\n } else if (this.options.defaultConversation) {\n // Use agent's default conversation explicitly\n args.push(\"--default\");\n }\n } else if (this.options.promptMode) {\n // prompt() without agentId: no agent flags\n // Headless will use LRU agent or create Memo (like `letta -p \"msg\"`)\n } else if (this.options.createOnly) {\n // createAgent() - explicitly create new agent\n args.push(\"--new-agent\");\n } else if (this.options.newConversation) {\n // createSession() without agentId - LRU agent + new conversation\n args.push(\"--new\");\n }\n // else: no agent flags = default behavior (LRU agent, default conversation)\n\n // Model\n if (this.options.model) {\n args.push(\"-m\", this.options.model);\n }\n\n // System prompt configuration\n if (this.options.systemPrompt !== undefined) {\n if (typeof this.options.systemPrompt === \"string\") {\n // Raw string → --system-custom\n args.push(\"--system-custom\", this.options.systemPrompt);\n } else {\n // Preset object → --system (+ optional --system-append)\n args.push(\"--system\", this.options.systemPrompt.preset);\n if (this.options.systemPrompt.append) {\n args.push(\"--system-append\", this.options.systemPrompt.append);\n }\n }\n }\n\n // Memory blocks (only for new agents)\n if (this.options.memory !== undefined && !this.options.agentId) {\n if (this.options.memory.length === 0) {\n // Empty array → no memory blocks (just core)\n args.push(\"--init-blocks\", \"\");\n } else {\n // Separate preset names from custom/reference blocks\n const presetNames: string[] = [];\n const memoryBlocksJson: Array<\n | { label: string; value: string }\n | { blockId: string }\n > = [];\n\n for (const item of this.options.memory) {\n if (typeof item === \"string\") {\n // Preset name\n presetNames.push(item);\n } else if (\"blockId\" in item) {\n // Block reference - pass to --memory-blocks\n memoryBlocksJson.push(item as { blockId: string });\n } else {\n // CreateBlock\n memoryBlocksJson.push(item as { label: string; value: string });\n }\n }\n\n // Add preset names via --init-blocks\n if (presetNames.length > 0) {\n args.push(\"--init-blocks\", presetNames.join(\",\"));\n }\n\n // Add custom blocks and block references via --memory-blocks\n if (memoryBlocksJson.length > 0) {\n args.push(\"--memory-blocks\", JSON.stringify(memoryBlocksJson));\n }\n }\n }\n\n // Convenience props for block values (only for new agents)\n if (!this.options.agentId) {\n if (this.options.persona !== undefined) {\n args.push(\"--block-value\", `persona=${this.options.persona}`);\n }\n if (this.options.human !== undefined) {\n args.push(\"--block-value\", `human=${this.options.human}`);\n }\n if (this.options.project !== undefined) {\n args.push(\"--block-value\", `project=${this.options.project}`);\n }\n }\n\n // Permission mode\n if (this.options.permissionMode === \"bypassPermissions\") {\n args.push(\"--yolo\");\n } else if (this.options.permissionMode === \"acceptEdits\") {\n args.push(\"--accept-edits\");\n }\n\n // Allowed tools\n if (this.options.allowedTools) {\n args.push(\"--allowedTools\", this.options.allowedTools.join(\",\"));\n }\n\n return args;\n }\n\n private async findCli(): Promise<string> {\n // Try multiple resolution strategies\n const { existsSync } = await import(\"node:fs\");\n const { dirname, join } = await import(\"node:path\");\n const { fileURLToPath } = await import(\"node:url\");\n\n // Strategy 1: Check LETTA_CLI_PATH env var\n if (process.env.LETTA_CLI_PATH && existsSync(process.env.LETTA_CLI_PATH)) {\n return process.env.LETTA_CLI_PATH;\n }\n\n // Strategy 2: Try to resolve from node_modules\n // Note: resolve the package main export (not /letta.js subpath) because\n // the package.json \"exports\" field doesn't expose the subpath directly.\n try {\n const { createRequire } = await import(\"node:module\");\n const require = createRequire(import.meta.url);\n const resolved = require.resolve(\"@letta-ai/letta-code\");\n if (existsSync(resolved)) {\n return resolved;\n }\n } catch {\n // Continue to next strategy\n }\n\n // Strategy 3: Check relative to this file (for local file: deps)\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n const localPaths = [\n join(__dirname, \"../../@letta-ai/letta-code/letta.js\"),\n join(__dirname, \"../../../letta-code-prod/letta.js\"),\n join(__dirname, \"../../../letta-code/letta.js\"),\n ];\n\n for (const p of localPaths) {\n if (existsSync(p)) {\n return p;\n }\n }\n\n throw new Error(\n \"Letta Code CLI not found. Set LETTA_CLI_PATH or install @letta-ai/letta-code.\"\n );\n }\n}\n",
|
|
6
|
+
"/**\n * SDK Validation\n *\n * Validates SessionOptions before spawning the CLI.\n */\n\nimport type { SessionOptions, MemoryItem, CreateBlock } from \"./types.js\";\n\n/**\n * Extract block labels from memory items.\n */\nfunction getBlockLabels(memory: MemoryItem[]): string[] {\n return memory\n .map((item) => {\n if (typeof item === \"string\") return item; // preset name\n if (\"label\" in item) return (item as CreateBlock).label; // CreateBlock\n return null; // blockId - no label to check\n })\n .filter((label): label is string => label !== null);\n}\n\n/**\n * Validate SessionOptions before spawning CLI.\n * Throws an error if validation fails.\n */\nexport function validateSessionOptions(options: SessionOptions): void {\n // If memory is specified, validate that convenience props match included blocks\n if (options.memory !== undefined) {\n const blockLabels = getBlockLabels(options.memory);\n\n if (options.persona !== undefined && !blockLabels.includes(\"persona\")) {\n throw new Error(\n \"Cannot set 'persona' value - block not included in 'memory'. \" +\n \"Either add 'persona' to memory array or remove the persona option.\"\n );\n }\n\n if (options.human !== undefined && !blockLabels.includes(\"human\")) {\n throw new Error(\n \"Cannot set 'human' value - block not included in 'memory'. \" +\n \"Either add 'human' to memory array or remove the human option.\"\n );\n }\n\n if (options.project !== undefined && !blockLabels.includes(\"project\")) {\n throw new Error(\n \"Cannot set 'project' value - block not included in 'memory'. \" +\n \"Either add 'project' to memory array or remove the project option.\"\n );\n }\n }\n\n // Validate systemPrompt preset if provided\n if (\n options.systemPrompt !== undefined &&\n typeof options.systemPrompt === \"object\"\n ) {\n const validPresets = [\n \"default\",\n \"letta-claude\",\n \"letta-codex\",\n \"letta-gemini\",\n \"claude\",\n \"codex\",\n \"gemini\",\n ];\n if (!validPresets.includes(options.systemPrompt.preset)) {\n throw new Error(\n `Invalid system prompt preset '${options.systemPrompt.preset}'. ` +\n `Valid presets: ${validPresets.join(\", \")}`\n );\n }\n }\n\n // Validate conversation options\n if (options.conversationId && options.newConversation) {\n throw new Error(\n \"Cannot use both 'conversationId' and 'newConversation'. \" +\n \"Use conversationId to resume a specific conversation, or newConversation to create a new one.\"\n );\n }\n\n if (options.defaultConversation && options.conversationId) {\n throw new Error(\n \"Cannot use both 'defaultConversation' and 'conversationId'. \" +\n \"Use defaultConversation with agentId, or conversationId alone.\"\n );\n }\n\n if (options.defaultConversation && options.newConversation) {\n throw new Error(\n \"Cannot use both 'defaultConversation' and 'newConversation'.\"\n );\n }\n\n // Note: Validations that require agentId context happen in transport.ts buildArgs()\n // because agentId is passed separately to resumeSession(), not in SessionOptions\n}\n",
|
|
7
|
+
"/**\n * Session\n *\n * Represents a conversation session with a Letta agent.\n * Implements the V2 API pattern: send() / receive()\n */\n\nimport { SubprocessTransport } from \"./transport.js\";\nimport type {\n SessionOptions,\n SDKMessage,\n SDKInitMessage,\n SDKAssistantMessage,\n SDKResultMessage,\n WireMessage,\n ControlRequest,\n CanUseToolControlRequest,\n CanUseToolResponse,\n CanUseToolResponseAllow,\n CanUseToolResponseDeny,\n} from \"./types.js\";\nimport { validateSessionOptions } from \"./validation.js\";\n\nexport class Session implements AsyncDisposable {\n private transport: SubprocessTransport;\n private _agentId: string | null = null;\n private _sessionId: string | null = null;\n private _conversationId: string | null = null;\n private initialized = false;\n\n constructor(\n private options: SessionOptions & { agentId?: string } = {}\n ) {\n // Validate options before creating transport\n validateSessionOptions(options);\n this.transport = new SubprocessTransport(options);\n }\n\n /**\n * Initialize the session (called automatically on first send)\n */\n async initialize(): Promise<SDKInitMessage> {\n if (this.initialized) {\n throw new Error(\"Session already initialized\");\n }\n\n await this.transport.connect();\n\n // Send initialize control request\n await this.transport.write({\n type: \"control_request\",\n request_id: \"init_1\",\n request: { subtype: \"initialize\" },\n });\n\n // Wait for init message\n for await (const msg of this.transport.messages()) {\n if (msg.type === \"system\" && \"subtype\" in msg && msg.subtype === \"init\") {\n const initMsg = msg as WireMessage & {\n agent_id: string;\n session_id: string;\n conversation_id: string;\n model: string;\n tools: string[];\n };\n this._agentId = initMsg.agent_id;\n this._sessionId = initMsg.session_id;\n this._conversationId = initMsg.conversation_id;\n this.initialized = true;\n\n return {\n type: \"init\",\n agentId: initMsg.agent_id,\n sessionId: initMsg.session_id,\n conversationId: initMsg.conversation_id,\n model: initMsg.model,\n tools: initMsg.tools,\n };\n }\n }\n\n throw new Error(\"Failed to initialize session - no init message received\");\n }\n\n /**\n * Send a message to the agent\n */\n async send(message: string): Promise<void> {\n if (!this.initialized) {\n await this.initialize();\n }\n\n await this.transport.write({\n type: \"user\",\n message: { role: \"user\", content: message },\n });\n }\n\n /**\n * Stream messages from the agent\n */\n async *stream(): AsyncGenerator<SDKMessage> {\n for await (const wireMsg of this.transport.messages()) {\n // Handle CLI → SDK control requests (e.g., can_use_tool)\n if (wireMsg.type === \"control_request\") {\n const controlReq = wireMsg as ControlRequest;\n if (controlReq.request.subtype === \"can_use_tool\") {\n await this.handleCanUseTool(\n controlReq.request_id,\n controlReq.request as CanUseToolControlRequest\n );\n continue;\n }\n }\n\n const sdkMsg = this.transformMessage(wireMsg);\n if (sdkMsg) {\n yield sdkMsg;\n\n // Stop on result message\n if (sdkMsg.type === \"result\") {\n break;\n }\n }\n }\n }\n\n /**\n * Handle can_use_tool control request from CLI (Claude SDK compatible format)\n */\n private async handleCanUseTool(\n requestId: string,\n req: CanUseToolControlRequest\n ): Promise<void> {\n let response: CanUseToolResponse;\n\n // If bypassPermissions mode, auto-allow all tools\n if (this.options.permissionMode === \"bypassPermissions\") {\n response = {\n behavior: \"allow\",\n updatedInput: null,\n updatedPermissions: [],\n } satisfies CanUseToolResponseAllow;\n } else if (this.options.canUseTool) {\n try {\n const result = await this.options.canUseTool(req.tool_name, req.input);\n if (result.behavior === \"allow\") {\n response = {\n behavior: \"allow\",\n updatedInput: result.updatedInput ?? null,\n updatedPermissions: [], // TODO: not implemented\n } satisfies CanUseToolResponseAllow;\n } else {\n response = {\n behavior: \"deny\",\n message: result.message ?? \"Denied by canUseTool callback\",\n interrupt: false, // TODO: not wired up yet\n } satisfies CanUseToolResponseDeny;\n }\n } catch (err) {\n response = {\n behavior: \"deny\",\n message: err instanceof Error ? err.message : \"Callback error\",\n interrupt: false,\n };\n }\n } else {\n // No callback registered - deny by default\n response = {\n behavior: \"deny\",\n message: \"No canUseTool callback registered\",\n interrupt: false,\n };\n }\n\n // Send control_response (Claude SDK compatible format)\n await this.transport.write({\n type: \"control_response\",\n response: {\n subtype: \"success\",\n request_id: requestId,\n response,\n },\n });\n }\n\n /**\n * Abort the current operation (interrupt without closing the session)\n */\n async abort(): Promise<void> {\n await this.transport.write({\n type: \"control_request\",\n request_id: `interrupt-${Date.now()}`,\n request: { subtype: \"interrupt\" },\n });\n }\n\n /**\n * Close the session\n */\n close(): void {\n this.transport.close();\n }\n\n /**\n * Get the agent ID (available after initialization)\n */\n get agentId(): string | null {\n return this._agentId;\n }\n\n /**\n * Get the session ID (available after initialization)\n */\n get sessionId(): string | null {\n return this._sessionId;\n }\n\n /**\n * Get the conversation ID (available after initialization)\n */\n get conversationId(): string | null {\n return this._conversationId;\n }\n\n /**\n * AsyncDisposable implementation for `await using`\n */\n async [Symbol.asyncDispose](): Promise<void> {\n this.close();\n }\n\n /**\n * Transform wire message to SDK message\n */\n private transformMessage(wireMsg: WireMessage): SDKMessage | null {\n // Init message\n if (wireMsg.type === \"system\" && \"subtype\" in wireMsg && wireMsg.subtype === \"init\") {\n const msg = wireMsg as WireMessage & {\n agent_id: string;\n session_id: string;\n conversation_id: string;\n model: string;\n tools: string[];\n };\n return {\n type: \"init\",\n agentId: msg.agent_id,\n sessionId: msg.session_id,\n conversationId: msg.conversation_id,\n model: msg.model,\n tools: msg.tools,\n };\n }\n\n // Handle message types (all have type: \"message\" with message_type field)\n if (wireMsg.type === \"message\" && \"message_type\" in wireMsg) {\n const msg = wireMsg as WireMessage & {\n message_type: string;\n uuid: string;\n // assistant_message fields\n content?: string;\n // tool_call_message fields\n tool_call?: { name: string; arguments: string; tool_call_id: string };\n tool_calls?: Array<{ name: string; arguments: string; tool_call_id: string }>;\n // tool_return_message fields\n tool_call_id?: string;\n tool_return?: string;\n status?: \"success\" | \"error\";\n // reasoning_message fields\n reasoning?: string;\n };\n\n // Assistant message\n if (msg.message_type === \"assistant_message\" && msg.content) {\n return {\n type: \"assistant\",\n content: msg.content,\n uuid: msg.uuid,\n };\n }\n\n // Tool call message\n if (msg.message_type === \"tool_call_message\") {\n const toolCall = msg.tool_calls?.[0] || msg.tool_call;\n if (toolCall) {\n let toolInput: Record<string, unknown> = {};\n try {\n toolInput = JSON.parse(toolCall.arguments);\n } catch {\n toolInput = { raw: toolCall.arguments };\n }\n return {\n type: \"tool_call\",\n toolCallId: toolCall.tool_call_id,\n toolName: toolCall.name,\n toolInput,\n uuid: msg.uuid,\n };\n }\n }\n\n // Tool return message\n if (msg.message_type === \"tool_return_message\" && msg.tool_call_id) {\n return {\n type: \"tool_result\",\n toolCallId: msg.tool_call_id,\n content: msg.tool_return || \"\",\n isError: msg.status === \"error\",\n uuid: msg.uuid,\n };\n }\n\n // Reasoning message\n if (msg.message_type === \"reasoning_message\" && msg.reasoning) {\n return {\n type: \"reasoning\",\n content: msg.reasoning,\n uuid: msg.uuid,\n };\n }\n }\n\n // Stream event (partial message updates)\n if (wireMsg.type === \"stream_event\") {\n const msg = wireMsg as WireMessage & {\n event: {\n type: string;\n index?: number;\n delta?: { type?: string; text?: string; reasoning?: string };\n content_block?: { type?: string; text?: string };\n };\n uuid: string;\n };\n return {\n type: \"stream_event\",\n event: msg.event,\n uuid: msg.uuid,\n };\n }\n\n // Result message\n if (wireMsg.type === \"result\") {\n const msg = wireMsg as WireMessage & {\n subtype: string;\n result?: string;\n duration_ms: number;\n total_cost_usd?: number;\n conversation_id: string;\n };\n return {\n type: \"result\",\n success: msg.subtype === \"success\",\n result: msg.result,\n error: msg.subtype !== \"success\" ? msg.subtype : undefined,\n durationMs: msg.duration_ms,\n totalCostUsd: msg.total_cost_usd,\n conversationId: msg.conversation_id,\n };\n }\n\n // Skip other message types (system_message, user_message, etc.)\n return null;\n }\n}\n",
|
|
8
|
+
"/**\n * Letta Code SDK\n *\n * Programmatic control of Letta Code CLI with persistent agent memory.\n *\n * @example\n * ```typescript\n * import { createAgent, createSession, resumeSession, prompt } from '@letta-ai/letta-code-sdk';\n *\n * // Start session with default agent + new conversation (like `letta`)\n * const session = createSession();\n *\n * // Create a new agent explicitly\n * const agentId = await createAgent();\n *\n * // Resume default conversation on an agent\n * const session = resumeSession(agentId);\n *\n * // Resume specific conversation\n * const session = resumeSession('conv-xxx');\n *\n * // Create new conversation on specific agent\n * const session = createSession(agentId);\n *\n * // One-shot prompt (uses default agent)\n * const result = await prompt('Hello');\n * const result = await prompt('Hello', agentId); // specific agent\n * ```\n */\n\nimport { Session } from \"./session.js\";\nimport type { SessionOptions, SDKMessage, SDKResultMessage } from \"./types.js\";\n\n// Re-export types\nexport type {\n SessionOptions,\n SDKMessage,\n SDKInitMessage,\n SDKAssistantMessage,\n SDKToolCallMessage,\n SDKToolResultMessage,\n SDKReasoningMessage,\n SDKResultMessage,\n SDKStreamEventMessage,\n PermissionMode,\n CanUseToolCallback,\n CanUseToolResponse,\n CanUseToolResponseAllow,\n CanUseToolResponseDeny,\n} from \"./types.js\";\n\nexport { Session } from \"./session.js\";\n\n/**\n * Create a new agent with a default conversation.\n * Returns the agentId which can be used with resumeSession or createSession.\n *\n * @example\n * ```typescript\n * const agentId = await createAgent();\n *\n * // Then resume the default conversation:\n * const session = resumeSession(agentId);\n * ```\n */\nexport async function createAgent(): Promise<string> {\n const session = new Session({ createOnly: true });\n const initMsg = await session.initialize();\n session.close();\n return initMsg.agentId;\n}\n\n/**\n * Create a new conversation (session).\n *\n * - Without agentId: uses default/LRU agent with new conversation (like `letta`)\n * - With agentId: creates new conversation on specified agent\n *\n * @example\n * ```typescript\n * // New conversation on default agent (like `letta`)\n * await using session = createSession();\n *\n * // New conversation on specific agent\n * await using session = createSession(agentId);\n * ```\n */\nexport function createSession(agentId?: string, options: SessionOptions = {}): Session {\n if (agentId) {\n return new Session({ ...options, agentId, newConversation: true });\n } else {\n return new Session({ ...options, newConversation: true });\n }\n}\n\n/**\n * Resume an existing session.\n *\n * - Pass an agent ID (agent-xxx) to resume the default conversation\n * - Pass a conversation ID (conv-xxx) to resume a specific conversation\n *\n * The default conversation always exists after createAgent, so you can:\n * `createAgent()` → `resumeSession(agentId)` without needing createSession first.\n *\n * @example\n * ```typescript\n * // Resume default conversation\n * await using session = resumeSession(agentId);\n *\n * // Resume specific conversation\n * await using session = resumeSession('conv-xxx');\n * ```\n */\nexport function resumeSession(\n id: string,\n options: SessionOptions = {}\n): Session {\n if (id.startsWith(\"conv-\")) {\n return new Session({ ...options, conversationId: id });\n } else {\n return new Session({ ...options, agentId: id, defaultConversation: true });\n }\n}\n\n/**\n * One-shot prompt convenience function.\n *\n * - Without agentId: uses default agent (like `letta -p`), new conversation\n * - With agentId: uses specific agent, new conversation\n *\n * @example\n * ```typescript\n * const result = await prompt('What is 2+2?'); // default agent\n * const result = await prompt('What is the capital of France?', agentId); // specific agent\n * ```\n */\nexport async function prompt(\n message: string,\n agentId?: string\n): Promise<SDKResultMessage> {\n // Use default agent behavior (like letta -p) when no agentId specified\n const session = agentId\n ? createSession(agentId)\n : new Session({ promptMode: true });\n\n try {\n await session.send(message);\n\n let result: SDKResultMessage | null = null;\n for await (const msg of session.stream()) {\n if (msg.type === \"result\") {\n result = msg;\n break;\n }\n }\n\n if (!result) {\n return {\n type: \"result\",\n success: false,\n error: \"No result received\",\n durationMs: 0,\n conversationId: session.conversationId,\n };\n }\n\n return result;\n } finally {\n session.close();\n }\n}\n"
|
|
9
9
|
],
|
|
10
|
-
"mappings": "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",
|
|
11
|
-
"debugId": "
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "9B2C0F446D80721E64756E2164756E21",
|
|
12
12
|
"names": []
|
|
13
13
|
}
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,cAAc,EASf,MAAM,YAAY,CAAC;AAGpB,qBAAa,OAAQ,YAAW,eAAe;IAQ3C,OAAO,CAAC,OAAO;IAPjB,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,WAAW,CAAS;gBAGlB,OAAO,GAAE,cAAc,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO;IAO7D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC;IA2C3C;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1C;;OAEG;IACI,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC;IA0B3C;;OAEG;YACW,gBAAgB;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,cAAc,EASf,MAAM,YAAY,CAAC;AAGpB,qBAAa,OAAQ,YAAW,eAAe;IAQ3C,OAAO,CAAC,OAAO;IAPjB,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,WAAW,CAAS;gBAGlB,OAAO,GAAE,cAAc,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO;IAO7D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC;IA2C3C;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1C;;OAEG;IACI,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC;IA0B3C;;OAEG;YACW,gBAAgB;IAwD9B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAE3B;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAE7B;IAED;;OAEG;IACH,IAAI,cAAc,IAAI,MAAM,GAAG,IAAI,CAElC;IAED;;OAEG;IACG,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5C;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAiIzB"}
|
package/dist/transport.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9D,qBAAa,mBAAmB;IAS5B,OAAO,CAAC,OAAO;IARjB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,gBAAgB,CAAyC;IACjE,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAC,CAAS;gBAGf,OAAO,GAAE,cAAc,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO;IAG7D;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9D,qBAAa,mBAAmB;IAS5B,OAAO,CAAC,OAAO;IARjB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,gBAAgB,CAAyC;IACjE,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAC,CAAS;gBAGf,OAAO,GAAE,cAAc,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO;IAG7D;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA4D9B;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAiBzC;;OAEG;IACI,QAAQ,IAAI,cAAc,CAAC,WAAW,CAAC;IAQ9C;;OAEG;IACH,KAAK,IAAI,IAAI;IAeb,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,SAAS;YAoJH,OAAO;CA4CtB"}
|
package/dist/types.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Protocol types are imported from @letta-ai/letta-code/protocol.
|
|
6
6
|
*/
|
|
7
7
|
export type { WireMessage, SystemInitMessage, MessageWire, ResultMessage, ErrorMessage, StreamEvent, ControlRequest, ControlResponse, CanUseToolControlRequest, CanUseToolResponse, CanUseToolResponseAllow, CanUseToolResponseDeny, SystemPromptPresetConfig, CreateBlock, } from "@letta-ai/letta-code/protocol";
|
|
8
|
-
import type { CreateBlock } from "@letta-ai/letta-code/protocol";
|
|
8
|
+
import type { CreateBlock, CanUseToolResponse } from "@letta-ai/letta-code/protocol";
|
|
9
9
|
/**
|
|
10
10
|
* Available system prompt presets.
|
|
11
11
|
*/
|
|
@@ -37,37 +37,24 @@ export type MemoryItem = string | CreateBlock | BlockReference;
|
|
|
37
37
|
*/
|
|
38
38
|
export type MemoryPreset = "persona" | "human" | "project";
|
|
39
39
|
/**
|
|
40
|
-
*
|
|
40
|
+
* Callback for custom permission handling.
|
|
41
41
|
*/
|
|
42
|
-
export
|
|
43
|
-
allow: boolean;
|
|
44
|
-
reason?: string;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Callback for custom permission handling
|
|
48
|
-
*/
|
|
49
|
-
export type CanUseToolCallback = (toolName: string, toolInput: Record<string, unknown>) => Promise<PermissionResult> | PermissionResult;
|
|
42
|
+
export type CanUseToolCallback = (toolName: string, toolInput: Record<string, unknown>) => Promise<CanUseToolResponse> | CanUseToolResponse;
|
|
50
43
|
/**
|
|
51
44
|
* Options for creating a session
|
|
52
45
|
*/
|
|
53
46
|
export interface SessionOptions {
|
|
54
47
|
/** Model to use (e.g., "claude-sonnet-4-20250514") */
|
|
55
48
|
model?: string;
|
|
56
|
-
/**
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
continue?: boolean;
|
|
62
|
-
/** Use agent's default conversation (requires agentId) */
|
|
63
|
-
defaultConversation?: boolean;
|
|
49
|
+
/** @internal */ conversationId?: string;
|
|
50
|
+
/** @internal */ newConversation?: boolean;
|
|
51
|
+
/** @internal */ defaultConversation?: boolean;
|
|
52
|
+
/** @internal */ createOnly?: boolean;
|
|
53
|
+
/** @internal */ promptMode?: boolean;
|
|
64
54
|
/**
|
|
65
55
|
* System prompt configuration.
|
|
66
56
|
* - string: Use as the complete system prompt
|
|
67
57
|
* - { type: 'preset', preset, append? }: Use a preset with optional appended text
|
|
68
|
-
*
|
|
69
|
-
* Available presets: 'default', 'letta-claude', 'letta-codex', 'letta-gemini',
|
|
70
|
-
* 'claude', 'codex', 'gemini'
|
|
71
58
|
*/
|
|
72
59
|
systemPrompt?: SystemPromptConfig;
|
|
73
60
|
/**
|
|
@@ -75,24 +62,13 @@ export interface SessionOptions {
|
|
|
75
62
|
* - string: Preset block name ("project", "persona", "human")
|
|
76
63
|
* - CreateBlock: Custom block definition
|
|
77
64
|
* - { blockId: string }: Reference to existing shared block
|
|
78
|
-
*
|
|
79
|
-
* If not specified, defaults to ["persona", "human", "project"].
|
|
80
|
-
* Core blocks (skills, loaded_skills) are always included automatically.
|
|
81
65
|
*/
|
|
82
66
|
memory?: MemoryItem[];
|
|
83
|
-
/**
|
|
84
|
-
* Convenience: Set persona block value directly.
|
|
85
|
-
* Uses default block description/limit, just overrides the value.
|
|
86
|
-
* Error if persona not included in memory config.
|
|
87
|
-
*/
|
|
67
|
+
/** Convenience: Set persona block value directly */
|
|
88
68
|
persona?: string;
|
|
89
|
-
/**
|
|
90
|
-
* Convenience: Set human block value directly.
|
|
91
|
-
*/
|
|
69
|
+
/** Convenience: Set human block value directly */
|
|
92
70
|
human?: string;
|
|
93
|
-
/**
|
|
94
|
-
* Convenience: Set project block value directly.
|
|
95
|
-
*/
|
|
71
|
+
/** Convenience: Set project block value directly */
|
|
96
72
|
project?: string;
|
|
97
73
|
/** List of allowed tool names */
|
|
98
74
|
allowedTools?: string[];
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,WAAW,EACX,cAAc,EACd,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EAEtB,wBAAwB,EACxB,WAAW,GACZ,MAAM,+BAA+B,CAAC;AAGvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,WAAW,EACX,cAAc,EACd,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EAEtB,wBAAwB,EACxB,WAAW,GACZ,MAAM,+BAA+B,CAAC;AAGvC,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAMrF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B,SAAS,GACT,cAAc,GACd,aAAa,GACb,cAAc,GACd,QAAQ,GACR,OAAO,GACP,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,2BAA2B,CAAC;AAMtE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,WAAW,GACX,cAAc,CAAC;AAEnB;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAM3D;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC/B,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IAKf,gBAAgB,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACzC,gBAAgB,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC3C,gBAAgB,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC/C,gBAAgB,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IACtC,gBAAgB,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAEtC;;;;OAIG;IACH,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAElC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IAEtB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,sBAAsB;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,mEAAmE;IACnE,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,aAAa,GAAG,mBAAmB,CAAC;AAM7E;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7D,aAAa,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAClD,CAAC;IACF,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qCAAqC;AACrC,MAAM,MAAM,UAAU,GAClB,cAAc,GACd,mBAAmB,GACnB,kBAAkB,GAClB,oBAAoB,GACpB,mBAAmB,GACnB,gBAAgB,GAChB,qBAAqB,CAAC"}
|
package/dist/validation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAA2B,MAAM,YAAY,CAAC;AAe1E;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAA2B,MAAM,YAAY,CAAC;AAe1E;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAwEpE"}
|