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 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?;
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
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
- /** Replace user image data with content-hash references so the retained transcript never duplicates image bytes. */
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
- throw new ImageInputError('image_unsupported_type', `Unsupported attachment type ${String(part.mediaType) || 'unknown'}; only PNG, JPEG, GIF and WebP images are supported`);
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
- // Whitespace-only text next to images carries nothing; keep text-only turns byte-identical to before.
120
- const message = images.length ? items.filter(item => item.type !== 'text' || item.text.trim()) : text;
121
- return { message, text, images };
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 turn = userTurnContent(last.content);
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: turn.text.trim() ? turn.text : '[Image]', signal };
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