ai-sdk-letta 0.1.0 → 0.2.0
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/CHANGELOG.md +6 -0
- package/README.md +5 -0
- package/dist/agent.d.ts +45 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +103 -17
- package/dist/agent.js.map +1 -1
- package/dist/attachments.d.ts +220 -0
- package/dist/attachments.d.ts.map +1 -0
- package/dist/attachments.js +627 -0
- package/dist/attachments.js.map +1 -0
- package/dist/file-tools.d.ts +93 -0
- package/dist/file-tools.d.ts.map +1 -0
- package/dist/file-tools.js +368 -0
- package/dist/file-tools.js.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/pdf.d.ts +70 -0
- package/dist/pdf.d.ts.map +1 -0
- package/dist/pdf.js +244 -0
- package/dist/pdf.js.map +1 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +8 -1
- package/dist/runtime.js.map +1 -1
- package/dist/state.d.ts +2 -0
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +2 -0
- package/dist/state.js.map +1 -1
- package/dist/tools.d.ts +16 -5
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +55 -6
- package/dist/tools.js.map +1 -1
- package/package.json +3 -2
- package/src/agent.ts +112 -16
- package/src/attachments.ts +555 -0
- package/src/file-tools.ts +319 -0
- package/src/index.ts +9 -2
- package/src/pdf.ts +229 -0
- package/src/runtime.ts +8 -1
- package/src/state.ts +2 -0
- package/src/tools.ts +50 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# ai-sdk-letta
|
|
2
2
|
|
|
3
|
+
## 0.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- fdfd790: File attachments. Opt-in built-in tools `list_files`, `read_file` (PDF page or text line ranges, bounded, saying when output is truncated) and `search_files` (passages with page or line), restricted to the current conversation's folder, which the runtime binds. Files (text, Markdown, CSV, JSON, code, PDF; detected by content) are stored per conversation (0700/0600, atomic writes, sanitized names, no symlinks or traversal), and the user's turn carries only an "Attached: ..." note. PDFs are read with `unpdf` 1.8.1 (pure JavaScript) in a bounded worker; pages without a text layer are returned to the model as images. Images are also saved to the folder. Typed `FileInputError`s and `FILE_LIMITS`. The tool bridge passes a runtime-bound `context` to tools and honours `toModelOutput` (text and bounded images). The server adds `POST /v1/uploads` (raw bytes, route-only 25 MB limit, CSRF), `files` on `POST /v1/runs`, and `GET /v1/threads/:id/files` and `/files/:name` (safe download headers). Agents without the file tools are unchanged.
|
|
8
|
+
|
|
3
9
|
## 0.1.0
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -27,6 +27,11 @@ Main exports:
|
|
|
27
27
|
- `LettaAgent`: the AI SDK `Agent` (`generate`, `stream`, `interactions`, `presentation`, `transcript`, `close`).
|
|
28
28
|
User turns may include images (`image`/`file` parts), sent as Letta `ImageContent`.
|
|
29
29
|
- `IMAGE_LIMITS`, `ImageInputError`, `validateImages`, `decodeImagePart`: image validation (PNG, JPEG, GIF, WebP).
|
|
30
|
+
- `fileTools`, `FILE_TOOL_PERMISSIONS`: opt-in `list_files`, `read_file`, `search_files`, bound to the
|
|
31
|
+
current conversation's attachment folder. With them, user turns may carry `file` parts (PDF, text,
|
|
32
|
+
Markdown, CSV, JSON, code), stored per conversation and announced by a short "Attached: ..." note.
|
|
33
|
+
- `AttachmentStore`, `UploadStaging`, `FILE_LIMITS`, `FileInputError`, `detectFileType`, `extractPdfText`:
|
|
34
|
+
the storage, validation and PDF layer (unpdf, pure JavaScript).
|
|
30
35
|
- `ToolInteractions`: the broker for approvals and `ask_user` questions.
|
|
31
36
|
- `createToolBridge`, `askUserTool`, `fileTraceWriter`: the tool policy layer.
|
|
32
37
|
- `resolveStateDirectory`, `acquireIdentity`, history and navigation helpers.
|
package/dist/agent.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { type Agent, type AgentCallParameters, type AgentStreamParameters, type ModelMessage, type ToolSet, type UIMessage } from 'ai';
|
|
2
|
-
import type { LettaCodeSession, SendMessage } from '@letta-ai/letta-agent-sdk';
|
|
2
|
+
import type { LettaCodeSession, MessageContentItem, SendMessage } from '@letta-ai/letta-agent-sdk';
|
|
3
3
|
import { ToolInteractions } from './interactions.js';
|
|
4
4
|
import { type DecodedImage } from './images.js';
|
|
5
|
+
import { type AttachmentStore, type StoredFile } from './attachments.js';
|
|
5
6
|
/** Most characters of text in one user turn. */
|
|
6
7
|
export declare const MAX_INPUT_CHARACTERS = 8000;
|
|
7
8
|
/** The subset of a Letta session a turn needs. */
|
|
@@ -38,6 +39,13 @@ export interface LettaAgentOptions<TOOLS extends ToolSet> {
|
|
|
38
39
|
presentation?: AgentPresentation;
|
|
39
40
|
delivery?: DeliveryHooks;
|
|
40
41
|
interactions?: ToolInteractions;
|
|
42
|
+
/**
|
|
43
|
+
* The conversation's attachment folder. With it, a user turn may carry
|
|
44
|
+
* files (`file` parts): they are stored there and the turn carries a short
|
|
45
|
+
* "Attached: ..." note instead of their content; images are stored too and
|
|
46
|
+
* still sent inline. Without it, only images are accepted.
|
|
47
|
+
*/
|
|
48
|
+
attachments?: AttachmentStore;
|
|
41
49
|
}
|
|
42
50
|
type Call<TOOLS extends ToolSet> = AgentCallParameters<never, TOOLS>;
|
|
43
51
|
/**
|
|
@@ -59,6 +67,40 @@ export declare function userTurnContent(content: ModelMessage['content']): {
|
|
|
59
67
|
text: string;
|
|
60
68
|
images: DecodedImage[];
|
|
61
69
|
};
|
|
70
|
+
/** A parsed user turn whose attachments are not stored yet. See {@link parseUserTurn}. */
|
|
71
|
+
export interface ParsedTurn {
|
|
72
|
+
text: string;
|
|
73
|
+
images: DecodedImage[];
|
|
74
|
+
/** Text and inline images, in order (whitespace-only text dropped when there are images). */
|
|
75
|
+
items: MessageContentItem[];
|
|
76
|
+
/** Attachments to store, in order: new bytes, or a reference to a stored file by SHA-256 and name. */
|
|
77
|
+
attachments: {
|
|
78
|
+
name: string;
|
|
79
|
+
bytes?: Uint8Array;
|
|
80
|
+
reference?: string;
|
|
81
|
+
}[];
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Validate a new user turn without storing anything: text length, images
|
|
85
|
+
* (type by content, size, count) and, with `limits`, attached files (count,
|
|
86
|
+
* size; remote URLs are refused). Without `limits` (an agent without file
|
|
87
|
+
* tools), non-image files are refused with `image_unsupported_type`, as before.
|
|
88
|
+
* @throws {ImageInputError | FileInputError}
|
|
89
|
+
*/
|
|
90
|
+
export declare function parseUserTurn(content: ModelMessage['content'], limits?: AttachmentStore['limits']): ParsedTurn;
|
|
91
|
+
/**
|
|
92
|
+
* Store a parsed turn's attachments in the conversation's folder and build
|
|
93
|
+
* the single Letta message: the user's text and inline images, followed by
|
|
94
|
+
* a short note per attachment such as "Attached: report.pdf (PDF, 12 pages,
|
|
95
|
+
* 2.1 MB)". File content is never inlined; the model reads it with the file
|
|
96
|
+
* tools. Without `store` (or attachments), the message is exactly what
|
|
97
|
+
* {@link userTurnContent} builds.
|
|
98
|
+
* @throws {FileInputError}
|
|
99
|
+
*/
|
|
100
|
+
export declare function storeUserTurn(turn: ParsedTurn, store?: AttachmentStore, signal?: AbortSignal): Promise<{
|
|
101
|
+
message: SendMessage;
|
|
102
|
+
files: StoredFile[];
|
|
103
|
+
}>;
|
|
62
104
|
/**
|
|
63
105
|
* A persistent, Letta-backed Vercel AI SDK `Agent`.
|
|
64
106
|
*
|
|
@@ -80,6 +122,8 @@ export declare class LettaAgent<TOOLS extends ToolSet = ToolSet> implements Agen
|
|
|
80
122
|
readonly presentation?: AgentPresentation;
|
|
81
123
|
/** Broker for approvals and `ask_user` questions; connect a renderer to it. */
|
|
82
124
|
readonly interactions: ToolInteractions;
|
|
125
|
+
/** This conversation's attachment folder, when the agent accepts files. */
|
|
126
|
+
readonly attachments?: AttachmentStore;
|
|
83
127
|
private readonly open;
|
|
84
128
|
private readonly memoryTools;
|
|
85
129
|
private readonly delivery?;
|
package/dist/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyC,KAAK,KAAK,EAAE,KAAK,mBAAmB,EAAE,KAAK,qBAAqB,EAAE,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,IAAI,CAAC;AAE9K,OAAO,KAAK,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/agent.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { generateText, streamText, stepCountIs } from 'ai';
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
2
3
|
import { ToolInteractions } from './interactions.js';
|
|
3
|
-
import { assertImageBudget, compactImagePart, decodeImagePart, imagePartDigest, ImageInputError, isImagePart, toLettaImage } from './images.js';
|
|
4
|
+
import { assertImageBudget, compactImagePart, decodeImagePart, IMAGE_REFERENCE_PROVIDER, imagePartDigest, ImageInputError, isImagePart, toLettaImage } from './images.js';
|
|
5
|
+
import { attachmentNote, decodeFilePart, FileInputError } from './attachments.js';
|
|
4
6
|
/** Most characters of text in one user turn. */
|
|
5
7
|
export const MAX_INPUT_CHARACTERS = 8000;
|
|
6
8
|
const usage = () => ({ inputTokens: { total: undefined, noCache: undefined, cacheRead: undefined, cacheWrite: undefined }, outputTokens: { total: undefined, text: undefined, reasoning: undefined } });
|
|
@@ -29,6 +31,9 @@ export function historyKey(messages) {
|
|
|
29
31
|
// A boundary like text: an image between two texts is not the same turn as the joined text.
|
|
30
32
|
parts.push({ role: message.role, text: null, image: imagePartDigest(part) });
|
|
31
33
|
}
|
|
34
|
+
else if (message.role === 'user' && part.type === 'file') {
|
|
35
|
+
parts.push({ role: message.role, text: null, file: filePartDigest(part), name: part.filename ?? null });
|
|
36
|
+
}
|
|
32
37
|
else if (part.type === 'tool-call' && message.role === 'assistant') {
|
|
33
38
|
parts.push({ call: part.toolCallId, name: part.toolName, input: part.input });
|
|
34
39
|
}
|
|
@@ -46,7 +51,7 @@ export function historyKey(messages) {
|
|
|
46
51
|
parts.push({ result: part.toolCallId, name: part.toolName, output });
|
|
47
52
|
}
|
|
48
53
|
else
|
|
49
|
-
throw new Error('Only text, user image and completed application tool history are supported');
|
|
54
|
+
throw new Error('Only text, user image and file, and completed application tool history are supported');
|
|
50
55
|
}
|
|
51
56
|
}
|
|
52
57
|
// Parallel calls arrive call/call/result/result, while UI cards convert as
|
|
@@ -73,10 +78,25 @@ export function historyKey(messages) {
|
|
|
73
78
|
flush();
|
|
74
79
|
return JSON.stringify(canonical);
|
|
75
80
|
}
|
|
76
|
-
/**
|
|
81
|
+
/** The content-hash reference in a file part, if it is one. */
|
|
82
|
+
function fileReference(part) {
|
|
83
|
+
const data = part.data;
|
|
84
|
+
const reference = data && typeof data === 'object' && data.type === 'reference' ? data.reference?.[IMAGE_REFERENCE_PROVIDER] : undefined;
|
|
85
|
+
return typeof reference === 'string' && /^[a-f0-9]{64}$/.test(reference) ? reference : undefined;
|
|
86
|
+
}
|
|
87
|
+
/** SHA-256 of a non-image file part's bytes (or its stored reference). */
|
|
88
|
+
function filePartDigest(part) {
|
|
89
|
+
return fileReference(part) ?? createHash('sha256').update(decodeFilePart(part, Number.MAX_SAFE_INTEGER).bytes).digest('hex');
|
|
90
|
+
}
|
|
91
|
+
/** A file part as a content-hash reference (name and type kept), so transcripts never hold file bytes. */
|
|
92
|
+
function compactFilePart(part) {
|
|
93
|
+
return { type: 'file', mediaType: typeof part.mediaType === 'string' ? part.mediaType : 'application/octet-stream', ...(part.filename ? { filename: part.filename } : {}),
|
|
94
|
+
data: { type: 'reference', reference: { [IMAGE_REFERENCE_PROVIDER]: filePartDigest(part) } } };
|
|
95
|
+
}
|
|
96
|
+
/** Replace user image and file data with content-hash references so the retained transcript never duplicates their bytes. */
|
|
77
97
|
function compactTranscript(messages) {
|
|
78
98
|
return messages.map(message => message.role === 'user' && typeof message.content !== 'string'
|
|
79
|
-
? { ...message, content: message.content.map(part => isImagePart(part) ? compactImagePart(part) : part) }
|
|
99
|
+
? { ...message, content: message.content.map(part => isImagePart(part) ? compactImagePart(part) : part.type === 'file' ? compactFilePart(part) : part) }
|
|
80
100
|
: message);
|
|
81
101
|
}
|
|
82
102
|
/**
|
|
@@ -86,11 +106,26 @@ function compactTranscript(messages) {
|
|
|
86
106
|
* @throws {ImageInputError} for unsupported, invalid or oversized images
|
|
87
107
|
*/
|
|
88
108
|
export function userTurnContent(content) {
|
|
109
|
+
const turn = parseUserTurn(content);
|
|
110
|
+
// Whitespace-only text next to images carries nothing; keep text-only turns byte-identical to before.
|
|
111
|
+
return { message: turn.images.length ? turn.items : turn.text, text: turn.text, images: turn.images };
|
|
112
|
+
}
|
|
113
|
+
const IMAGE_EXTENSION = { 'image/png': 'png', 'image/jpeg': 'jpg', 'image/gif': 'gif', 'image/webp': 'webp' };
|
|
114
|
+
/**
|
|
115
|
+
* Validate a new user turn without storing anything: text length, images
|
|
116
|
+
* (type by content, size, count) and, with `limits`, attached files (count,
|
|
117
|
+
* size; remote URLs are refused). Without `limits` (an agent without file
|
|
118
|
+
* tools), non-image files are refused with `image_unsupported_type`, as before.
|
|
119
|
+
* @throws {ImageInputError | FileInputError}
|
|
120
|
+
*/
|
|
121
|
+
export function parseUserTurn(content, limits) {
|
|
89
122
|
const parts = typeof content === 'string' ? [{ type: 'text', text: content }] : content;
|
|
90
123
|
if (!Array.isArray(parts))
|
|
91
124
|
throw new Error('Expected a new user turn');
|
|
92
125
|
const items = [];
|
|
93
126
|
const images = [];
|
|
127
|
+
const attachments = [];
|
|
128
|
+
let files = 0;
|
|
94
129
|
for (const part of parts) {
|
|
95
130
|
if (part.type === 'text') {
|
|
96
131
|
const last = items.at(-1);
|
|
@@ -104,21 +139,59 @@ export function userTurnContent(content) {
|
|
|
104
139
|
images.push(image);
|
|
105
140
|
assertImageBudget(images);
|
|
106
141
|
items.push(toLettaImage(image));
|
|
142
|
+
if (limits) {
|
|
143
|
+
const filename = part.type === 'file' && typeof part.filename === 'string' && part.filename.trim() ? part.filename : `image.${IMAGE_EXTENSION[image.mediaType]}`;
|
|
144
|
+
attachments.push({ name: filename, bytes: Buffer.from(image.base64, 'base64') });
|
|
145
|
+
}
|
|
107
146
|
}
|
|
108
147
|
else if (part.type === 'file') {
|
|
109
|
-
|
|
148
|
+
// Without file tools nothing could read the file: refuse it exactly as before files existed.
|
|
149
|
+
if (!limits)
|
|
150
|
+
throw new ImageInputError('image_unsupported_type', `Unsupported attachment type ${String(part.mediaType) || 'unknown'}; only PNG, JPEG, GIF and WebP images are supported`);
|
|
151
|
+
if (++files > limits.maxFilesPerMessage)
|
|
152
|
+
throw new FileInputError('files_too_many', `Attach up to ${limits.maxFilesPerMessage} files per message`);
|
|
153
|
+
const reference = fileReference(part);
|
|
154
|
+
attachments.push(reference ? { name: part.filename ?? '', reference } : decodeFilePart(part, limits.maxFileBytes));
|
|
110
155
|
}
|
|
111
156
|
else
|
|
112
|
-
throw new Error('Only text and image input is supported');
|
|
157
|
+
throw new Error(limits ? 'Only text, image and file input is supported' : 'Only text and image input is supported');
|
|
113
158
|
}
|
|
114
159
|
const text = items.map(item => item.type === 'text' ? item.text : '').join('');
|
|
115
160
|
if (text.length > MAX_INPUT_CHARACTERS)
|
|
116
161
|
throw new Error(`Input text can be up to ${MAX_INPUT_CHARACTERS} characters`);
|
|
117
|
-
if (!text.trim() && !images.length)
|
|
118
|
-
throw new Error('Input must contain text or an image');
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
162
|
+
if (!text.trim() && !images.length && !attachments.length)
|
|
163
|
+
throw new Error(limits ? 'Input must contain text, an image or a file' : 'Input must contain text or an image');
|
|
164
|
+
return { text, images, items: images.length ? items.filter(item => item.type !== 'text' || item.text.trim()) : items, attachments };
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Store a parsed turn's attachments in the conversation's folder and build
|
|
168
|
+
* the single Letta message: the user's text and inline images, followed by
|
|
169
|
+
* a short note per attachment such as "Attached: report.pdf (PDF, 12 pages,
|
|
170
|
+
* 2.1 MB)". File content is never inlined; the model reads it with the file
|
|
171
|
+
* tools. Without `store` (or attachments), the message is exactly what
|
|
172
|
+
* {@link userTurnContent} builds.
|
|
173
|
+
* @throws {FileInputError}
|
|
174
|
+
*/
|
|
175
|
+
export async function storeUserTurn(turn, store, signal) {
|
|
176
|
+
if (!store || !turn.attachments.length)
|
|
177
|
+
return { message: turn.images.length ? turn.items : turn.text, files: [] };
|
|
178
|
+
const existing = turn.attachments.some(a => a.reference) ? store.list() : [];
|
|
179
|
+
const files = turn.attachments.map(a => {
|
|
180
|
+
if (!a.reference)
|
|
181
|
+
return undefined;
|
|
182
|
+
const file = existing.find(f => f.sha256 === a.reference && f.name === a.name);
|
|
183
|
+
if (!file)
|
|
184
|
+
throw new FileInputError('file_not_found', `${a.name || 'A referenced file'} is not stored in this conversation`);
|
|
185
|
+
return file;
|
|
186
|
+
});
|
|
187
|
+
const fresh = turn.attachments.flatMap((a, i) => a.reference ? [] : [{ i, name: a.name, bytes: a.bytes }]);
|
|
188
|
+
const stored = fresh.length ? await store.save(fresh, { signal }) : [];
|
|
189
|
+
fresh.forEach(({ i }, n) => { files[i] = stored[n]; });
|
|
190
|
+
const note = attachmentNote(files);
|
|
191
|
+
const message = turn.images.length
|
|
192
|
+
? [...turn.items, { type: 'text', text: `${turn.items.some(item => item.type === 'text') ? '\n\n' : ''}${note}` }]
|
|
193
|
+
: `${turn.text.trimEnd()}${turn.text.trim() ? '\n\n' : ''}${note}`;
|
|
194
|
+
return { message, files: files };
|
|
122
195
|
}
|
|
123
196
|
/**
|
|
124
197
|
* A persistent, Letta-backed Vercel AI SDK `Agent`.
|
|
@@ -141,6 +214,8 @@ export class LettaAgent {
|
|
|
141
214
|
presentation;
|
|
142
215
|
/** Broker for approvals and `ask_user` questions; connect a renderer to it. */
|
|
143
216
|
interactions;
|
|
217
|
+
/** This conversation's attachment folder, when the agent accepts files. */
|
|
218
|
+
attachments;
|
|
144
219
|
open;
|
|
145
220
|
memoryTools;
|
|
146
221
|
delivery;
|
|
@@ -159,6 +234,7 @@ export class LettaAgent {
|
|
|
159
234
|
this.delivery = options.delivery;
|
|
160
235
|
this.interactions = options.interactions ?? new ToolInteractions();
|
|
161
236
|
this.modelId = options.modelId ?? 'letta';
|
|
237
|
+
this.attachments = options.attachments;
|
|
162
238
|
}
|
|
163
239
|
/**
|
|
164
240
|
* A copy of the transcript this instance has sent and received (images as
|
|
@@ -168,7 +244,7 @@ export class LettaAgent {
|
|
|
168
244
|
get transcript() { return structuredClone(this.history); }
|
|
169
245
|
/** Abort any running turn, cancel pending prompts, and refuse further turns. */
|
|
170
246
|
close() { this.unusable = true; this.active?.abort(); this.interactions.close(); }
|
|
171
|
-
prepare(options) {
|
|
247
|
+
async prepare(options) {
|
|
172
248
|
if (this.unusable)
|
|
173
249
|
throw new Error('Session closed or delivery uncertain; inspect backend history before reopening (no retries).');
|
|
174
250
|
if (this.busy)
|
|
@@ -185,18 +261,28 @@ export class LettaAgent {
|
|
|
185
261
|
const last = messages.at(-1);
|
|
186
262
|
if (last.role !== 'user')
|
|
187
263
|
throw new Error('History edits, replay, and regeneration are not supported');
|
|
188
|
-
// Validate the new turn first, so an oversized or unsupported image is reported as such.
|
|
189
|
-
const
|
|
264
|
+
// Validate the new turn first, so an oversized or unsupported image or file is reported as such.
|
|
265
|
+
const parsed = parseUserTurn(last.content, this.attachments?.limits);
|
|
190
266
|
if (historyKey(messages.slice(0, -1)) !== historyKey(this.history))
|
|
191
267
|
throw new Error('History edits, replay, and regeneration are not supported');
|
|
192
268
|
options.abortSignal?.throwIfAborted();
|
|
193
269
|
this.busy = true;
|
|
270
|
+
// Attachments are stored before delivery; a turn that then fails leaves them in the folder (harmless, and listed).
|
|
271
|
+
let turn;
|
|
272
|
+
try {
|
|
273
|
+
turn = await storeUserTurn(parsed, this.attachments, options.abortSignal);
|
|
274
|
+
options.abortSignal?.throwIfAborted();
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
this.busy = false;
|
|
278
|
+
throw error;
|
|
279
|
+
}
|
|
194
280
|
const control = new AbortController();
|
|
195
281
|
this.active = control;
|
|
196
282
|
const signal = options.abortSignal ? AbortSignal.any([options.abortSignal, control.signal]) : control.signal;
|
|
197
283
|
// The retained transcript keeps images as hashes only; Letta already holds the bytes.
|
|
198
284
|
// (Compact before cloning: URL objects in image parts are not cloneable.)
|
|
199
|
-
return { messages: structuredClone(compactTranscript(messages)), message: turn.message, prompt:
|
|
285
|
+
return { messages: structuredClone(compactTranscript(messages)), message: turn.message, prompt: parsed.text.trim() ? parsed.text : parsed.attachments.length > parsed.images.length ? '[File]' : '[Image]', signal, files: turn.files };
|
|
200
286
|
}
|
|
201
287
|
model(message, signal) {
|
|
202
288
|
const run = async (emit) => {
|
|
@@ -328,7 +414,7 @@ export class LettaAgent {
|
|
|
328
414
|
}
|
|
329
415
|
/** Run one turn and wait for the full result. */
|
|
330
416
|
async generate(options) {
|
|
331
|
-
const turn = this.prepare(options);
|
|
417
|
+
const turn = await this.prepare(options);
|
|
332
418
|
try {
|
|
333
419
|
const result = await generateText({ model: this.model(turn.message, turn.signal), prompt: turn.prompt, tools: this.tools, maxRetries: 0, stopWhen: stepCountIs(1), abortSignal: turn.signal });
|
|
334
420
|
this.delivery?.complete();
|
|
@@ -346,7 +432,7 @@ export class LettaAgent {
|
|
|
346
432
|
}
|
|
347
433
|
/** Run one turn as a stream (text deltas, provider-executed tool calls and results). */
|
|
348
434
|
async stream(options) {
|
|
349
|
-
const turn = this.prepare(options);
|
|
435
|
+
const turn = await this.prepare(options);
|
|
350
436
|
return streamText({ model: this.model(turn.message, turn.signal), prompt: turn.prompt, tools: this.tools, maxRetries: 0, stopWhen: stepCountIs(1), abortSignal: turn.signal,
|
|
351
437
|
onError: () => { this.unusable = true; this.busy = false; },
|
|
352
438
|
onAbort: () => { this.close(); this.busy = false; },
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounds for attached files. A message may carry at most `maxFilesPerMessage`
|
|
3
|
+
* non-image files; images keep their own limits (`IMAGE_LIMITS`).
|
|
4
|
+
*/
|
|
5
|
+
export interface FileLimits {
|
|
6
|
+
maxFileBytes: number;
|
|
7
|
+
maxFilesPerMessage: number;
|
|
8
|
+
maxConversationFiles: number;
|
|
9
|
+
maxConversationBytes: number;
|
|
10
|
+
}
|
|
11
|
+
export declare const FILE_LIMITS: Readonly<FileLimits>;
|
|
12
|
+
/** Machine-readable reason for {@link FileInputError}. */
|
|
13
|
+
export type FileInputErrorCode = 'file_unsupported_type' | 'file_invalid' | 'file_too_large' | 'files_too_many' | 'conversation_files_full' | 'file_not_found' | 'file_name_invalid' | 'file_range_invalid' | 'files_unavailable';
|
|
14
|
+
/** A rejected file. `code` is stable; `message` is human-readable. */
|
|
15
|
+
export declare class FileInputError extends Error {
|
|
16
|
+
readonly code: FileInputErrorCode;
|
|
17
|
+
readonly name = "FileInputError";
|
|
18
|
+
constructor(code: FileInputErrorCode, message: string);
|
|
19
|
+
}
|
|
20
|
+
/** What a stored file is, by content. */
|
|
21
|
+
export type FileKind = 'text' | 'pdf' | 'image';
|
|
22
|
+
/** Metadata of a stored attachment. */
|
|
23
|
+
export interface StoredFile {
|
|
24
|
+
name: string;
|
|
25
|
+
kind: FileKind;
|
|
26
|
+
mediaType: string;
|
|
27
|
+
/** Short type label, e.g. "PDF", "CSV", "Markdown", "PNG image". */
|
|
28
|
+
label: string;
|
|
29
|
+
bytes: number;
|
|
30
|
+
sha256: string;
|
|
31
|
+
/** PDFs: number of pages. */
|
|
32
|
+
pages?: number;
|
|
33
|
+
/** Text: number of lines. */
|
|
34
|
+
lines?: number;
|
|
35
|
+
createdAt: string;
|
|
36
|
+
}
|
|
37
|
+
/** A file validated and held in staging, not yet part of the conversation. */
|
|
38
|
+
export interface StagedFile extends StoredFile {
|
|
39
|
+
id: string;
|
|
40
|
+
}
|
|
41
|
+
/** "2.1 MB", "340 KB", "512 bytes". */
|
|
42
|
+
export declare function formatBytes(bytes: number): string;
|
|
43
|
+
/** Extensions accepted as text (content must still be UTF-8 text). */
|
|
44
|
+
export declare const TEXT_EXTENSIONS: readonly string[];
|
|
45
|
+
/**
|
|
46
|
+
* Is this UTF-8 text? Valid UTF-8, no NUL bytes, and almost no other control
|
|
47
|
+
* characters (tab, newline, carriage return and form feed are fine). A UTF-8
|
|
48
|
+
* byte-order mark is allowed.
|
|
49
|
+
*/
|
|
50
|
+
export declare function isText(bytes: Uint8Array): boolean;
|
|
51
|
+
/** Decode text bytes (UTF-8, BOM dropped). Assumes {@link isText} passed. */
|
|
52
|
+
export declare const decodeText: (bytes: Uint8Array) => string;
|
|
53
|
+
/**
|
|
54
|
+
* Detect a supported file type by content: PDF (by its header), PNG, JPEG,
|
|
55
|
+
* GIF or WebP (by magic bytes), or UTF-8 text. The name only refines the
|
|
56
|
+
* label of text files (CSV, Markdown, ...) and must not contradict the
|
|
57
|
+
* content (a ".pdf" that is not a PDF is refused).
|
|
58
|
+
* @throws {FileInputError}
|
|
59
|
+
*/
|
|
60
|
+
export declare function detectFileType(bytes: Uint8Array, name: string): {
|
|
61
|
+
kind: FileKind;
|
|
62
|
+
mediaType: string;
|
|
63
|
+
label: string;
|
|
64
|
+
};
|
|
65
|
+
/** Longest stored file name, in characters. */
|
|
66
|
+
export declare const MAX_NAME_LENGTH = 120;
|
|
67
|
+
/**
|
|
68
|
+
* A safe, plain file name: the last path segment only, NFC-normalized,
|
|
69
|
+
* without control, formatting or path characters, not hidden, at most
|
|
70
|
+
* {@link MAX_NAME_LENGTH} characters (the extension is kept).
|
|
71
|
+
*/
|
|
72
|
+
export declare function sanitizeFileName(input: string, fallback?: string): string;
|
|
73
|
+
/** True for a name that {@link sanitizeFileName} leaves unchanged. */
|
|
74
|
+
export declare const isPlainFileName: (name: unknown) => name is string;
|
|
75
|
+
/** "report.pdf" → "report (2).pdf". */
|
|
76
|
+
export declare function numberedName(name: string, n: number): string;
|
|
77
|
+
/** "PDF, 12 pages, 2.1 MB" */
|
|
78
|
+
export declare function describeFile(file: Pick<StoredFile, 'label' | 'bytes' | 'pages' | 'lines'>): string;
|
|
79
|
+
/** One line per file, e.g. "Attached: report.pdf (PDF, 12 pages, 2.1 MB)". This is all the model sees of a file until it reads it. */
|
|
80
|
+
export declare const attachmentNote: (files: readonly Pick<StoredFile, "name" | "label" | "bytes" | "pages" | "lines">[]) => string;
|
|
81
|
+
/** Append the note to a user's text, separated by a blank line. */
|
|
82
|
+
export declare const withAttachmentNote: (text: string, files: readonly Pick<StoredFile, "name" | "label" | "bytes" | "pages" | "lines">[]) => string;
|
|
83
|
+
/**
|
|
84
|
+
* Split the attachment note off a user message: trailing "Attached: name (description)"
|
|
85
|
+
* lines become `files`. Used to show file chips for restored history.
|
|
86
|
+
*/
|
|
87
|
+
export declare function parseAttachmentNote(text: string): {
|
|
88
|
+
text: string;
|
|
89
|
+
files: {
|
|
90
|
+
name: string;
|
|
91
|
+
description: string;
|
|
92
|
+
label: string;
|
|
93
|
+
}[];
|
|
94
|
+
};
|
|
95
|
+
/** Staged uploads older than this are removed on the next upload. */
|
|
96
|
+
export declare const STAGING_TTL_MS: number;
|
|
97
|
+
/** A validated file, ready to store. */
|
|
98
|
+
interface Prepared {
|
|
99
|
+
name: string;
|
|
100
|
+
kind: FileKind;
|
|
101
|
+
mediaType: string;
|
|
102
|
+
label: string;
|
|
103
|
+
bytes: Uint8Array;
|
|
104
|
+
sha256: string;
|
|
105
|
+
pages?: string[];
|
|
106
|
+
lines?: number;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Validate a file by content and extract what reading it needs (PDF text,
|
|
110
|
+
* line counts). The name is sanitized and its extension made to match the
|
|
111
|
+
* content.
|
|
112
|
+
* @throws {FileInputError}
|
|
113
|
+
*/
|
|
114
|
+
export declare function prepareFile(name: string, bytes: Uint8Array, options?: {
|
|
115
|
+
signal?: AbortSignal;
|
|
116
|
+
limits?: Readonly<FileLimits>;
|
|
117
|
+
}): Promise<Prepared>;
|
|
118
|
+
/**
|
|
119
|
+
* One conversation's attachment folder, `<root>/<agentId>/<conversationId>/`
|
|
120
|
+
* (directories 0700, files 0600).
|
|
121
|
+
*
|
|
122
|
+
* Every name resolves inside this folder only: names must be plain file
|
|
123
|
+
* names exactly as stored (no separators, no leading dot), symlinks and
|
|
124
|
+
* hard links are never followed, and the folder's real path must equal the
|
|
125
|
+
* expected one. A store never sees another conversation's files.
|
|
126
|
+
*
|
|
127
|
+
* Besides the files, private sidecars live in `.meta/` (metadata) and
|
|
128
|
+
* `.text/` (text extracted from PDFs).
|
|
129
|
+
*/
|
|
130
|
+
export declare class AttachmentStore {
|
|
131
|
+
readonly root: string;
|
|
132
|
+
readonly agentId: string;
|
|
133
|
+
readonly conversationId: string;
|
|
134
|
+
readonly limits: Readonly<FileLimits>;
|
|
135
|
+
readonly directory: string;
|
|
136
|
+
constructor(root: string, agentId: string, conversationId: string, limits?: Readonly<FileLimits>);
|
|
137
|
+
/** Create (0700) and verify the folder; returns its real path. */
|
|
138
|
+
private ensure;
|
|
139
|
+
/** The folder's real path, or `undefined` if nothing was ever stored. */
|
|
140
|
+
private existing;
|
|
141
|
+
/** Every stored file, oldest first. A file added by hand is described from its content; links and odd names are skipped. */
|
|
142
|
+
list(): StoredFile[];
|
|
143
|
+
/** Metadata of one file by its exact name. @throws {FileInputError} `file_not_found` or `file_name_invalid` */
|
|
144
|
+
get(name: unknown): StoredFile;
|
|
145
|
+
/** The bytes of one file, read without following links and checked against its recorded hash. */
|
|
146
|
+
read(name: unknown): {
|
|
147
|
+
file: StoredFile;
|
|
148
|
+
bytes: Buffer;
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* Readable content: the text of a text file, or one string per PDF page
|
|
152
|
+
* (empty for pages without a text layer). PDF text is cached by content hash.
|
|
153
|
+
* @throws {FileInputError}
|
|
154
|
+
*/
|
|
155
|
+
content(name: unknown, signal?: AbortSignal): Promise<{
|
|
156
|
+
file: StoredFile;
|
|
157
|
+
text: string;
|
|
158
|
+
} | {
|
|
159
|
+
file: StoredFile;
|
|
160
|
+
pages: string[];
|
|
161
|
+
}>;
|
|
162
|
+
private budget;
|
|
163
|
+
/** A stored file with this content under this name (or a numbered variant of it), if any. */
|
|
164
|
+
private duplicate;
|
|
165
|
+
/** Write one prepared file under a free name ("report (2).pdf" on collision). */
|
|
166
|
+
private place;
|
|
167
|
+
/**
|
|
168
|
+
* Store validated files: all are checked against the conversation's limits
|
|
169
|
+
* first, then written. An identical file already stored under the same name
|
|
170
|
+
* is reused rather than duplicated.
|
|
171
|
+
* @throws {FileInputError}
|
|
172
|
+
*/
|
|
173
|
+
store(files: readonly Prepared[]): StoredFile[];
|
|
174
|
+
/** Validate and store files (see {@link prepareFile} and {@link store}). */
|
|
175
|
+
save(files: readonly {
|
|
176
|
+
name: string;
|
|
177
|
+
bytes: Uint8Array;
|
|
178
|
+
}[], options?: {
|
|
179
|
+
signal?: AbortSignal;
|
|
180
|
+
}): Promise<StoredFile[]>;
|
|
181
|
+
}
|
|
182
|
+
/** Bytes of an uploaded file waiting to be sent, plus its validated metadata. */
|
|
183
|
+
export interface StagedUpload {
|
|
184
|
+
meta: StagedFile;
|
|
185
|
+
prepared: Prepared;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Validated uploads waiting to be sent with a message (`<root>/.staging/`,
|
|
189
|
+
* private). A browser uploads each file as soon as it is attached; the
|
|
190
|
+
* message that sends it moves it into the conversation's folder
|
|
191
|
+
* ({@link AttachmentStore.store}). Uploads expire after {@link STAGING_TTL_MS}.
|
|
192
|
+
*/
|
|
193
|
+
export declare class UploadStaging {
|
|
194
|
+
readonly root: string;
|
|
195
|
+
readonly limits: Readonly<FileLimits>;
|
|
196
|
+
readonly maxPending: number;
|
|
197
|
+
readonly directory: string;
|
|
198
|
+
constructor(root: string, limits?: Readonly<FileLimits>, maxPending?: number);
|
|
199
|
+
private ensure;
|
|
200
|
+
private sweep;
|
|
201
|
+
/** Validate (type by content, size, PDF text) and stage an upload. @throws {FileInputError} */
|
|
202
|
+
stage(name: string, bytes: Uint8Array, options?: {
|
|
203
|
+
signal?: AbortSignal;
|
|
204
|
+
}): Promise<StagedFile>;
|
|
205
|
+
/** Load staged uploads by ID, re-checking their bytes. @throws {FileInputError} `file_not_found`, `files_too_many` */
|
|
206
|
+
load(ids: readonly unknown[]): StagedUpload[];
|
|
207
|
+
/** Remove staged uploads (after they were stored, or when discarded). */
|
|
208
|
+
discard(ids: readonly string[]): void;
|
|
209
|
+
}
|
|
210
|
+
/** A non-image AI SDK `file` part's bytes and name. Remote URLs are never fetched. @throws {FileInputError} */
|
|
211
|
+
export declare function decodeFilePart(part: {
|
|
212
|
+
data?: unknown;
|
|
213
|
+
filename?: unknown;
|
|
214
|
+
mediaType?: unknown;
|
|
215
|
+
}, limit?: number): {
|
|
216
|
+
name: string;
|
|
217
|
+
bytes: Uint8Array;
|
|
218
|
+
};
|
|
219
|
+
export {};
|
|
220
|
+
//# sourceMappingURL=attachments.d.ts.map
|