@ai-sdk-letta/server 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 +11 -0
- package/README.md +22 -2
- package/dist/http.d.ts +13 -0
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +54 -4
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/runtime.d.ts +82 -3
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +116 -11
- package/dist/runtime.js.map +1 -1
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +3 -2
- package/dist/serve.js.map +1 -1
- package/package.json +2 -2
- package/src/http.ts +49 -4
- package/src/index.ts +2 -2
- package/src/runtime.ts +99 -15
- package/src/serve.ts +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @ai-sdk-letta/server
|
|
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
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [fdfd790]
|
|
12
|
+
- ai-sdk-letta@0.2.0
|
|
13
|
+
|
|
3
14
|
## 0.1.0
|
|
4
15
|
|
|
5
16
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -18,7 +18,8 @@ npm install @ai-sdk-letta/server ai-sdk-letta ai
|
|
|
18
18
|
Routes (under `/api` for the GUI): `GET /v1/capabilities`, `GET|POST /v1/threads`,
|
|
19
19
|
`PATCH /v1/threads/:id`, `GET /v1/threads/:id/history`, `GET /v1/threads/:id/view`,
|
|
20
20
|
`POST /v1/runs`, `GET /v1/runs/:id/events?after=N` (NDJSON), `POST /v1/runs/:id/answer`,
|
|
21
|
-
`POST /v1/runs/:id/cancel
|
|
21
|
+
`POST /v1/runs/:id/cancel`, and with the file tools `POST /v1/uploads`,
|
|
22
|
+
`GET /v1/threads/:id/files`, `GET /v1/threads/:id/files/:name`.
|
|
22
23
|
|
|
23
24
|
`POST /v1/runs` takes `{ id, threadId, text, parentRunId, images? }`, where
|
|
24
25
|
`images` is a list of `{ mediaType, data }` (base64, no `data:` prefix).
|
|
@@ -28,7 +29,26 @@ Text may be empty when images are present. Images are validated against
|
|
|
28
29
|
`images_too_many` (400), `images_too_large`: 413). Only this route accepts a
|
|
29
30
|
larger body (`RUN_BODY_LIMIT_BYTES`); others keep `BODY_LIMIT_BYTES` (24 KB)
|
|
30
31
|
and answer `payload_too_large` (413) beyond it. Runtime state stores each
|
|
31
|
-
image's type, size and SHA-256, never its bytes.
|
|
32
|
+
image's type, size and SHA-256, never its bytes. An image may carry a
|
|
33
|
+
`name`; with the file tools it is also saved to the conversation's folder
|
|
34
|
+
under that name.
|
|
35
|
+
|
|
36
|
+
**Files** (when the definition includes `fileTools`). `POST /v1/uploads`
|
|
37
|
+
takes one file's raw bytes (`Content-Type: application/octet-stream`, the
|
|
38
|
+
URL-encoded name in `X-File-Name`), validates it (type by content, size,
|
|
39
|
+
PDF text) and stages it; it returns `{ id, name, kind, mediaType, label,
|
|
40
|
+
bytes, pages?, lines? }`. Only this route accepts raw bodies, up to
|
|
41
|
+
`UPLOAD_BODY_LIMIT_BYTES` (25 MB); at most three uploads are validated at
|
|
42
|
+
once (`uploads_busy`, 429). `POST /v1/runs` then takes `files: [id, ...]`
|
|
43
|
+
(up to 8): the staged files move into the conversation's folder and the
|
|
44
|
+
turn carries the "Attached: ..." note. Staged uploads expire after 24 hours.
|
|
45
|
+
`GET /v1/threads/:id/files` lists a conversation's files (archived threads
|
|
46
|
+
keep them); `GET /v1/threads/:id/files/:name` downloads one with
|
|
47
|
+
`Content-Disposition: attachment`, `nosniff`, `Cross-Origin-Resource-Policy:
|
|
48
|
+
same-origin` and a sandboxing CSP (text is served as `text/plain`). Errors
|
|
49
|
+
use fixed codes: `file_unsupported_type`, `file_invalid`, `file_name_invalid`
|
|
50
|
+
(400), `file_not_found`, `files_unavailable` (404), `files_too_many`,
|
|
51
|
+
`conversation_files_full` (409), `file_too_large`, `payload_too_large` (413).
|
|
32
52
|
|
|
33
53
|
`startGuiServer` serves a built browser app from the directory you pass. The
|
|
34
54
|
assistant-ui app in this repository (`apps/web`) is not on npm yet; build it
|
package/dist/http.d.ts
CHANGED
|
@@ -13,6 +13,17 @@ export declare const BODY_LIMIT_BYTES: number;
|
|
|
13
13
|
* enforced again on the decoded bytes.
|
|
14
14
|
*/
|
|
15
15
|
export declare const RUN_BODY_LIMIT_BYTES: number;
|
|
16
|
+
/**
|
|
17
|
+
* Body limit for `POST /v1/uploads` only: one file's raw bytes
|
|
18
|
+
* (`application/octet-stream`, not base64), at most `FILE_LIMITS.maxFileBytes`.
|
|
19
|
+
*/
|
|
20
|
+
export declare const UPLOAD_BODY_LIMIT_BYTES: number;
|
|
21
|
+
/**
|
|
22
|
+
* `Content-Disposition` for a download: always `attachment`, with an ASCII
|
|
23
|
+
* fallback name and the exact UTF-8 name (RFC 6266 / 5987). Quotes, control
|
|
24
|
+
* characters and path separators never reach the header.
|
|
25
|
+
*/
|
|
26
|
+
export declare function contentDisposition(name: string): string;
|
|
16
27
|
/** Shared routes; the caller must install its transport-specific authentication first. */
|
|
17
28
|
export declare function runtimeRoutes(app: express.Express, runtime: ThreadRuntime, owner: string, shutdown?: () => Promise<void>): express.Express;
|
|
18
29
|
/** What the browser may know about the agent. */
|
|
@@ -21,6 +32,8 @@ export interface GuiAgentInfo {
|
|
|
21
32
|
name: string;
|
|
22
33
|
/** Tools whose calls always ask for approval (used for display only). */
|
|
23
34
|
approvalTools?: readonly string[];
|
|
35
|
+
/** Whether the agent accepts file attachments (it has the file tools). */
|
|
36
|
+
files?: boolean;
|
|
24
37
|
}
|
|
25
38
|
/**
|
|
26
39
|
* Loopback-only, same-origin browser transport. No bearer token enters the
|
package/dist/http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,cAAc,CAAC;AAGhE;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,mBAW7H;AAED,8DAA8D;AAC9D,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAC1C;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,QAA4D,CAAC;
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,cAAc,CAAC;AAGhE;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,mBAW7H;AAED,8DAA8D;AAC9D,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAC1C;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,QAA4D,CAAC;AAC9F;;;GAGG;AACH,eAAO,MAAM,uBAAuB,QAA2B,CAAC;AAEhE;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIvD;AAID,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,mBA0DxH;AAED,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,0EAA0E;IAC1E,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,+CAwB9G"}
|
package/dist/http.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
2
|
import { randomBytes, timingSafeEqual } from 'node:crypto';
|
|
3
|
-
import { IMAGE_LIMITS, IMAGE_MEDIA_TYPES } from 'ai-sdk-letta';
|
|
3
|
+
import { FILE_LIMITS, IMAGE_LIMITS, IMAGE_MEDIA_TYPES, TEXT_EXTENSIONS } from 'ai-sdk-letta';
|
|
4
4
|
import { RuntimeFault } from './runtime.js';
|
|
5
5
|
/**
|
|
6
6
|
* Server-to-server API: bearer token (256-bit hex) plus an owner header, on
|
|
@@ -30,13 +30,61 @@ export const BODY_LIMIT_BYTES = 24 * 1024;
|
|
|
30
30
|
* enforced again on the decoded bytes.
|
|
31
31
|
*/
|
|
32
32
|
export const RUN_BODY_LIMIT_BYTES = Math.ceil(IMAGE_LIMITS.maxTotalBytes / 3) * 4 + 64 * 1024;
|
|
33
|
+
/**
|
|
34
|
+
* Body limit for `POST /v1/uploads` only: one file's raw bytes
|
|
35
|
+
* (`application/octet-stream`, not base64), at most `FILE_LIMITS.maxFileBytes`.
|
|
36
|
+
*/
|
|
37
|
+
export const UPLOAD_BODY_LIMIT_BYTES = FILE_LIMITS.maxFileBytes;
|
|
38
|
+
/**
|
|
39
|
+
* `Content-Disposition` for a download: always `attachment`, with an ASCII
|
|
40
|
+
* fallback name and the exact UTF-8 name (RFC 6266 / 5987). Quotes, control
|
|
41
|
+
* characters and path separators never reach the header.
|
|
42
|
+
*/
|
|
43
|
+
export function contentDisposition(name) {
|
|
44
|
+
const fallback = name.normalize('NFKD').replace(/[^\x20-\x7e]/g, '').replace(/["\\/;%]/g, '_').trim() || 'download';
|
|
45
|
+
const encoded = encodeURIComponent(name).replace(/['()*]/g, c => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
|
|
46
|
+
return `attachment; filename="${fallback}"; filename*=UTF-8''${encoded}`;
|
|
47
|
+
}
|
|
48
|
+
/** Content type for a download: text is always served as plain text, never as HTML or script. */
|
|
49
|
+
const downloadType = (file) => file.kind === 'pdf' ? 'application/pdf' : file.kind === 'image' ? file.mediaType : file.mediaType === 'text/csv' ? 'text/csv; charset=utf-8' : 'text/plain; charset=utf-8';
|
|
33
50
|
/** Shared routes; the caller must install its transport-specific authentication first. */
|
|
34
51
|
export function runtimeRoutes(app, runtime, owner, shutdown) {
|
|
35
52
|
const small = express.json({ limit: BODY_LIMIT_BYTES });
|
|
36
53
|
const runs = express.json({ limit: RUN_BODY_LIMIT_BYTES });
|
|
37
|
-
|
|
54
|
+
// Raw bytes, only on the upload route, only as application/octet-stream, bounded by the per-file limit.
|
|
55
|
+
const upload = express.raw({ limit: UPLOAD_BODY_LIMIT_BYTES, type: 'application/octet-stream' });
|
|
56
|
+
app.use((req, res, next) => (req.method === 'POST' && req.path === '/v1/runs' ? runs : req.method === 'POST' && req.path === '/v1/uploads' ? upload : small)(req, res, next));
|
|
38
57
|
app.get('/v1/capabilities', (_req, res) => res.json({ version: 1, stateful: true, tools: 'observed-only', interactions: ['approval', 'question'], history: true, replay: true, concurrency: 1, edits: false,
|
|
39
|
-
images: { mediaTypes: [...IMAGE_MEDIA_TYPES], maxImageBytes: IMAGE_LIMITS.maxImageBytes, maxImages: IMAGE_LIMITS.maxImages, maxTotalBytes: IMAGE_LIMITS.maxTotalBytes }
|
|
58
|
+
images: { mediaTypes: [...IMAGE_MEDIA_TYPES], maxImageBytes: IMAGE_LIMITS.maxImageBytes, maxImages: IMAGE_LIMITS.maxImages, maxTotalBytes: IMAGE_LIMITS.maxTotalBytes },
|
|
59
|
+
files: runtime.uploads ? { types: ['text', 'pdf', 'image'], textExtensions: [...TEXT_EXTENSIONS], maxFileBytes: FILE_LIMITS.maxFileBytes, maxFilesPerMessage: FILE_LIMITS.maxFilesPerMessage, maxConversationFiles: FILE_LIMITS.maxConversationFiles, maxConversationBytes: FILE_LIMITS.maxConversationBytes } : null }));
|
|
60
|
+
/**
|
|
61
|
+
* Stage one file for the next run: raw bytes as `application/octet-stream`,
|
|
62
|
+
* the name URL-encoded in `X-File-Name`. Validated by content (type, size,
|
|
63
|
+
* PDF text) before anything is kept. Returns `{ id, name, kind, ... }`.
|
|
64
|
+
*/
|
|
65
|
+
app.post('/v1/uploads', async (req, res) => {
|
|
66
|
+
if (!req.is('application/octet-stream') || !Buffer.isBuffer(req.body))
|
|
67
|
+
throw new RuntimeFault('invalid_input', 415);
|
|
68
|
+
let name;
|
|
69
|
+
try {
|
|
70
|
+
name = decodeURIComponent(String(req.headers['x-file-name'] ?? ''));
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
throw new RuntimeFault('file_name_invalid', 400);
|
|
74
|
+
}
|
|
75
|
+
const control = new AbortController();
|
|
76
|
+
res.on('close', () => { if (!res.writableEnded)
|
|
77
|
+
control.abort(); });
|
|
78
|
+
res.status(201).json(await runtime.upload(owner, name, req.body, control.signal));
|
|
79
|
+
});
|
|
80
|
+
app.get('/v1/threads/:id/files', (req, res) => res.json(runtime.files(owner, req.params.id)));
|
|
81
|
+
/** Download one attached file. Always as an attachment, never rendered by the app's origin. */
|
|
82
|
+
app.get('/v1/threads/:id/files/:name', (req, res) => {
|
|
83
|
+
const { file, bytes } = runtime.file(owner, req.params.id, req.params.name);
|
|
84
|
+
res.set({ 'Content-Type': downloadType(file), 'Content-Disposition': contentDisposition(file.name), 'Content-Length': String(bytes.byteLength),
|
|
85
|
+
'Cross-Origin-Resource-Policy': 'same-origin', 'Content-Security-Policy': "default-src 'none'; sandbox", 'Cache-Control': 'private, no-store' });
|
|
86
|
+
res.end(bytes);
|
|
87
|
+
});
|
|
40
88
|
app.get('/v1/threads', (_req, res) => res.json(runtime.list(owner)));
|
|
41
89
|
app.post('/v1/threads', async (req, res) => res.status(201).json(await runtime.create(owner, req.body?.id, req.body?.title)));
|
|
42
90
|
app.patch('/v1/threads/:id', (req, res) => res.json(runtime.updateMetadata(owner, req.params.id, req.body)));
|
|
@@ -72,6 +120,8 @@ export function runtimeRoutes(app, runtime, owner, shutdown) {
|
|
|
72
120
|
// Body parser rejections: fixed codes, never parser messages.
|
|
73
121
|
if (error?.type === 'entity.too.large')
|
|
74
122
|
return res.status(413).json({ error: 'payload_too_large' });
|
|
123
|
+
if (error?.type === 'request.aborted')
|
|
124
|
+
return res.end();
|
|
75
125
|
res.status(error instanceof RuntimeFault ? error.status : error instanceof SyntaxError ? 400 : 503).json({ error: error instanceof RuntimeFault ? error.code : 'runtime_unavailable' });
|
|
76
126
|
});
|
|
77
127
|
return app;
|
|
@@ -98,7 +148,7 @@ export function guiApp(runtime, owner, port, assets, agent) {
|
|
|
98
148
|
});
|
|
99
149
|
app.get('/api/session', (_req, res) => {
|
|
100
150
|
res.cookie('ai_sdk_letta_session', session, { httpOnly: true, sameSite: 'strict', path: '/' });
|
|
101
|
-
res.json({ csrf, agent: { id: agent.id, name: agent.name, approvalTools: [...(agent.approvalTools ?? [])] } });
|
|
151
|
+
res.json({ csrf, agent: { id: agent.id, name: agent.name, approvalTools: [...(agent.approvalTools ?? [])], files: !!agent.files } });
|
|
102
152
|
});
|
|
103
153
|
app.use('/api', (req, res, next) => {
|
|
104
154
|
const cookie = req.headers.cookie?.split(';').map(s => s.trim()).find(s => s.startsWith('ai_sdk_letta_session='))?.slice('ai_sdk_letta_session='.length);
|
package/dist/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @packageDocumentation
|
|
6
6
|
*/
|
|
7
|
-
export { ThreadRuntime, RuntimeFault, displayRun, toolFailureReason, type RuntimeEvent, type Run, type RunImage, type RunInput, type RuntimeHost, type RuntimeSession } from './runtime.js';
|
|
8
|
-
export { guiApp, tokenApiApp, runtimeRoutes, BODY_LIMIT_BYTES, RUN_BODY_LIMIT_BYTES, type GuiAgentInfo } from './http.js';
|
|
7
|
+
export { ThreadRuntime, RuntimeFault, displayRun, toolFailureReason, fileFault, fileSummary, type RuntimeEvent, type Run, type RunImage, type RunFile, type RunInput, type RuntimeHost, type RuntimeSession } from './runtime.js';
|
|
8
|
+
export { guiApp, tokenApiApp, runtimeRoutes, contentDisposition, BODY_LIMIT_BYTES, RUN_BODY_LIMIT_BYTES, UPLOAD_BODY_LIMIT_BYTES, type GuiAgentInfo } from './http.js';
|
|
9
9
|
export { startGuiServer, startApiServer, closeOnSignals, DEFAULT_PORT, type ServeOptions, type RunningServer } from './serve.js';
|
|
10
10
|
//# 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;;;;;GAKG;AACH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,KAAK,YAAY,EAAE,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAClO,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AACvK,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @packageDocumentation
|
|
6
6
|
*/
|
|
7
|
-
export { ThreadRuntime, RuntimeFault, displayRun, toolFailureReason } from './runtime.js';
|
|
8
|
-
export { guiApp, tokenApiApp, runtimeRoutes, BODY_LIMIT_BYTES, RUN_BODY_LIMIT_BYTES } from './http.js';
|
|
7
|
+
export { ThreadRuntime, RuntimeFault, displayRun, toolFailureReason, fileFault, fileSummary } from './runtime.js';
|
|
8
|
+
export { guiApp, tokenApiApp, runtimeRoutes, contentDisposition, BODY_LIMIT_BYTES, RUN_BODY_LIMIT_BYTES, UPLOAD_BODY_LIMIT_BYTES } from './http.js';
|
|
9
9
|
export { startGuiServer, startApiServer, closeOnSignals, DEFAULT_PORT } from './serve.js';
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAAE,WAAW,EAAkH,MAAM,cAAc,CAAC;AAClO,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,uBAAuB,EAAqB,MAAM,WAAW,CAAC;AACvK,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAyC,MAAM,YAAY,CAAC"}
|
package/dist/runtime.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { UIMessage } from 'ai';
|
|
2
|
-
import { type InteractionResponse, type LettaAgent } from 'ai-sdk-letta';
|
|
2
|
+
import { AttachmentStore, UploadStaging, type InteractionResponse, type LettaAgent, type StagedFile, type StoredFile } from 'ai-sdk-letta';
|
|
3
3
|
/** One NDJSON event of a run. The application, never the HTTP consumer, owns tools. */
|
|
4
4
|
export type RuntimeEvent = {
|
|
5
5
|
sequence: number;
|
|
@@ -18,12 +18,20 @@ export type Run = {
|
|
|
18
18
|
threadId: string;
|
|
19
19
|
input: string;
|
|
20
20
|
images?: RunImage[];
|
|
21
|
+
files?: RunFile[];
|
|
22
|
+
uploads?: string[];
|
|
21
23
|
parentRunId: string | null;
|
|
22
24
|
status: 'running' | 'completed' | 'failed' | 'cancelled' | 'interrupted';
|
|
23
25
|
events: RuntimeEvent[];
|
|
24
26
|
startedAt?: string;
|
|
25
27
|
};
|
|
26
|
-
/**
|
|
28
|
+
/** Metadata of a file sent with a run (as stored in the conversation's folder). */
|
|
29
|
+
export type RunFile = Pick<StoredFile, 'name' | 'kind' | 'mediaType' | 'label' | 'bytes' | 'sha256' | 'pages' | 'lines'>;
|
|
30
|
+
/**
|
|
31
|
+
* Input of `POST /v1/runs`. `images` carry base64 data (no data: prefix) and
|
|
32
|
+
* are validated against `IMAGE_LIMITS`. `files` are upload IDs returned by
|
|
33
|
+
* `POST /v1/uploads` (at most `FILE_LIMITS.maxFilesPerMessage`).
|
|
34
|
+
*/
|
|
27
35
|
export type RunInput = {
|
|
28
36
|
id: string;
|
|
29
37
|
threadId: string;
|
|
@@ -32,14 +40,18 @@ export type RunInput = {
|
|
|
32
40
|
images?: {
|
|
33
41
|
mediaType: string;
|
|
34
42
|
data: string;
|
|
43
|
+
name?: string;
|
|
35
44
|
}[];
|
|
45
|
+
files?: string[];
|
|
36
46
|
};
|
|
37
47
|
/** An opened agent conversation as seen by the runtime. */
|
|
38
48
|
export interface RuntimeSession {
|
|
39
49
|
agentId: string;
|
|
40
50
|
conversationId: string;
|
|
41
51
|
history: UIMessage[];
|
|
42
|
-
agent: Pick<LettaAgent<any>, 'stream' | 'interactions' | 'transcript'
|
|
52
|
+
agent: Pick<LettaAgent<any>, 'stream' | 'interactions' | 'transcript'> & {
|
|
53
|
+
attachments?: AttachmentStore;
|
|
54
|
+
};
|
|
43
55
|
}
|
|
44
56
|
/** Opens and closes the single agent session the runtime drives. */
|
|
45
57
|
export interface RuntimeHost {
|
|
@@ -49,6 +61,12 @@ export interface RuntimeHost {
|
|
|
49
61
|
newTitle: string;
|
|
50
62
|
}): Promise<RuntimeSession>;
|
|
51
63
|
close(): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* Root of the per-conversation attachment folders, when the agent accepts
|
|
66
|
+
* files (its definition includes the file tools). Without it, uploads and
|
|
67
|
+
* file lists are refused with `files_unavailable`.
|
|
68
|
+
*/
|
|
69
|
+
attachmentsRoot?: string;
|
|
52
70
|
}
|
|
53
71
|
/** A client-visible failure with a fixed code and HTTP status. */
|
|
54
72
|
export declare class RuntimeFault extends Error {
|
|
@@ -56,6 +74,20 @@ export declare class RuntimeFault extends Error {
|
|
|
56
74
|
readonly status: number;
|
|
57
75
|
constructor(code: string, status?: number);
|
|
58
76
|
}
|
|
77
|
+
/** A FileInputError as a fixed-code RuntimeFault; anything else unchanged. */
|
|
78
|
+
export declare const fileFault: (error: unknown) => unknown;
|
|
79
|
+
/** Public metadata of a stored file (what list and upload return). */
|
|
80
|
+
export declare const fileSummary: (file: StoredFile | StagedFile) => {
|
|
81
|
+
createdAt: string;
|
|
82
|
+
lines?: number | undefined;
|
|
83
|
+
pages?: number | undefined;
|
|
84
|
+
name: string;
|
|
85
|
+
kind: import("ai-sdk-letta").FileKind;
|
|
86
|
+
mediaType: string;
|
|
87
|
+
label: string;
|
|
88
|
+
bytes: number;
|
|
89
|
+
id?: string | undefined;
|
|
90
|
+
};
|
|
59
91
|
export declare function toolFailureReason(error: unknown): {
|
|
60
92
|
reason?: string;
|
|
61
93
|
};
|
|
@@ -81,6 +113,8 @@ export declare class ThreadRuntime {
|
|
|
81
113
|
private active?;
|
|
82
114
|
private pending?;
|
|
83
115
|
private listeners;
|
|
116
|
+
/** Validated uploads waiting to be sent, next to this runtime's state (`<dir>/uploads/.staging`). */
|
|
117
|
+
readonly uploads?: UploadStaging;
|
|
84
118
|
constructor(host: RuntimeHost, filename: string, owner: string, deadlineMs?: number, humanWaitMs?: number);
|
|
85
119
|
private save;
|
|
86
120
|
private authorize;
|
|
@@ -119,6 +153,14 @@ export declare class ThreadRuntime {
|
|
|
119
153
|
messages: UIMessage<unknown, import("ai").UIDataTypes, import("ai").UITools>[];
|
|
120
154
|
lastRunId: string | null;
|
|
121
155
|
live: {
|
|
156
|
+
files?: {
|
|
157
|
+
lines?: number | undefined;
|
|
158
|
+
pages?: number | undefined;
|
|
159
|
+
name: string;
|
|
160
|
+
label: string;
|
|
161
|
+
bytes: number;
|
|
162
|
+
kind: import("ai-sdk-letta").FileKind;
|
|
163
|
+
}[] | undefined;
|
|
122
164
|
images?: number | undefined;
|
|
123
165
|
id: string;
|
|
124
166
|
input: string;
|
|
@@ -132,6 +174,43 @@ export declare class ThreadRuntime {
|
|
|
132
174
|
lastRunId: string | null;
|
|
133
175
|
}>;
|
|
134
176
|
private emit;
|
|
177
|
+
/** The thread's attachment folder (no session is opened). */
|
|
178
|
+
private store;
|
|
179
|
+
/** Files attached to a thread's conversation, oldest first. Archived threads keep their files. */
|
|
180
|
+
files(owner: string, id: string): {
|
|
181
|
+
createdAt: string;
|
|
182
|
+
lines?: number | undefined;
|
|
183
|
+
pages?: number | undefined;
|
|
184
|
+
name: string;
|
|
185
|
+
kind: import("ai-sdk-letta").FileKind;
|
|
186
|
+
mediaType: string;
|
|
187
|
+
label: string;
|
|
188
|
+
bytes: number;
|
|
189
|
+
id?: string | undefined;
|
|
190
|
+
}[];
|
|
191
|
+
/** One attached file's metadata and bytes, by its exact stored name. */
|
|
192
|
+
file(owner: string, id: string, name: string): {
|
|
193
|
+
file: StoredFile;
|
|
194
|
+
bytes: Buffer;
|
|
195
|
+
};
|
|
196
|
+
/**
|
|
197
|
+
* Validate an upload (type by content, size, PDF text) and stage it until a
|
|
198
|
+
* run sends it. Not tied to a thread yet: a new chat uploads before it exists.
|
|
199
|
+
*/
|
|
200
|
+
upload(owner: string, name: unknown, bytes: Uint8Array, signal?: AbortSignal): Promise<{
|
|
201
|
+
createdAt: string;
|
|
202
|
+
lines?: number | undefined;
|
|
203
|
+
pages?: number | undefined;
|
|
204
|
+
name: string;
|
|
205
|
+
kind: import("ai-sdk-letta").FileKind;
|
|
206
|
+
mediaType: string;
|
|
207
|
+
label: string;
|
|
208
|
+
bytes: number;
|
|
209
|
+
id?: string | undefined;
|
|
210
|
+
}>;
|
|
211
|
+
/** Uploads validated at the same time; more are refused with `uploads_busy` (429). */
|
|
212
|
+
static readonly MAX_CONCURRENT_UPLOADS = 3;
|
|
213
|
+
private uploading;
|
|
135
214
|
/**
|
|
136
215
|
* Start one turn. Text, images or both; images are validated (type by
|
|
137
216
|
* content, size, count, total) and fail with a fixed `image_*` code.
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,IAAI,CAAC;AACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { readFileSync, writeFileSync, renameSync, existsSync, openSync, closeSync, fsyncSync } from 'node:fs';
|
|
2
|
-
import { dirname } from 'node:path';
|
|
3
|
-
import { IMAGE_PLACEHOLDER, ImageInputError, MAX_INPUT_CHARACTERS, validateImages, validateResponse } from 'ai-sdk-letta';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { AttachmentStore, FILE_LIMITS, FileInputError, IMAGE_PLACEHOLDER, IMAGE_REFERENCE_PROVIDER, ImageInputError, MAX_INPUT_CHARACTERS, UploadStaging, attachmentNote, validateImages, validateResponse, } from 'ai-sdk-letta';
|
|
4
4
|
/** A client-visible failure with a fixed code and HTTP status. */
|
|
5
5
|
export class RuntimeFault extends Error {
|
|
6
6
|
code;
|
|
@@ -14,6 +14,13 @@ export class RuntimeFault extends Error {
|
|
|
14
14
|
const uuid = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i;
|
|
15
15
|
/** Only app-defined, fixed failure codes (e.g. user_denied) are surfaced; never free-form error text. */
|
|
16
16
|
const failureReasons = new Set(['user_denied', 'approval_cancelled', 'tool_denied', 'tool_cancelled', 'tool_timeout', 'tool_failed', 'invalid_arguments', 'interaction_unavailable', 'permission_denied', 'duplicate_or_limit', 'tool_output_limit']);
|
|
17
|
+
/** HTTP status for a refused file. */
|
|
18
|
+
const fileStatus = (code) => code === 'file_too_large' ? 413 : code === 'file_not_found' ? 404 : code === 'conversation_files_full' || code === 'files_too_many' ? 409 : 400;
|
|
19
|
+
/** A FileInputError as a fixed-code RuntimeFault; anything else unchanged. */
|
|
20
|
+
export const fileFault = (error) => error instanceof FileInputError ? new RuntimeFault(error.code, fileStatus(error.code)) : error;
|
|
21
|
+
/** Public metadata of a stored file (what list and upload return). */
|
|
22
|
+
export const fileSummary = (file) => ({ ...('id' in file ? { id: file.id } : {}), name: file.name, kind: file.kind, mediaType: file.mediaType, label: file.label, bytes: file.bytes,
|
|
23
|
+
...(file.pages !== undefined ? { pages: file.pages } : {}), ...(file.lines !== undefined ? { lines: file.lines } : {}), createdAt: file.createdAt });
|
|
17
24
|
export function toolFailureReason(error) {
|
|
18
25
|
let value = error;
|
|
19
26
|
if (typeof value === 'string') {
|
|
@@ -58,10 +65,14 @@ export function displayRun(run) {
|
|
|
58
65
|
}
|
|
59
66
|
const metadata = run.startedAt ? { metadata: { createdAt: run.startedAt } } : {};
|
|
60
67
|
// Runtime state never stores image bytes; failed/reconnecting runs show a placeholder.
|
|
61
|
-
|
|
68
|
+
// Files are shown by the same "Attached: ..." note the agent received.
|
|
69
|
+
const note = run.files?.length ? attachmentNote(run.files) : '';
|
|
70
|
+
const text = note ? `${run.input.trimEnd()}${run.input.trim() ? '\n\n' : ''}${note}` : run.input;
|
|
71
|
+
const user = [...(text.trim() ? [{ type: 'text', text }] : []), ...(run.images ?? []).map(() => ({ type: 'text', text: IMAGE_PLACEHOLDER }))];
|
|
62
72
|
return [{ id: `${run.id}-user`, role: 'user', parts: user, ...metadata }, { id: `${run.id}-assistant`, role: 'assistant', parts }];
|
|
63
73
|
}
|
|
64
74
|
const sameImages = (a = [], b = []) => a.length === b.length && a.every((image, index) => image.sha256 === b[index].sha256);
|
|
75
|
+
const sameUploads = (a = [], b = []) => a.length === b.length && a.every((id, index) => id === b[index]);
|
|
65
76
|
/**
|
|
66
77
|
* Single-owner, single-turn thread service over one agent.
|
|
67
78
|
*
|
|
@@ -82,12 +93,16 @@ export class ThreadRuntime {
|
|
|
82
93
|
active;
|
|
83
94
|
pending;
|
|
84
95
|
listeners = new Map();
|
|
96
|
+
/** Validated uploads waiting to be sent, next to this runtime's state (`<dir>/uploads/.staging`). */
|
|
97
|
+
uploads;
|
|
85
98
|
constructor(host, filename, owner, deadlineMs = 180_000, humanWaitMs = 4 * 60_000) {
|
|
86
99
|
this.host = host;
|
|
87
100
|
this.filename = filename;
|
|
88
101
|
this.owner = owner;
|
|
89
102
|
this.deadlineMs = deadlineMs;
|
|
90
103
|
this.humanWaitMs = humanWaitMs;
|
|
104
|
+
if (host.attachmentsRoot)
|
|
105
|
+
this.uploads = new UploadStaging(join(dirname(filename), 'uploads'));
|
|
91
106
|
this.state = existsSync(filename) ? JSON.parse(readFileSync(filename, 'utf8')) : { version: 1, threads: [], runs: [] };
|
|
92
107
|
if (this.state.version !== 1 || !Array.isArray(this.state.threads) || !Array.isArray(this.state.runs))
|
|
93
108
|
throw new Error('Invalid runtime state');
|
|
@@ -243,7 +258,7 @@ export class ThreadRuntime {
|
|
|
243
258
|
return {
|
|
244
259
|
messages: this.current.history.filter(m => m.id !== 'session-status'),
|
|
245
260
|
lastRunId: latest?.id ?? null,
|
|
246
|
-
live: { id: this.active.run.id, input: this.active.run.input, ...(this.active.run.images?.length ? { images: this.active.run.images.length } : {}) },
|
|
261
|
+
live: { id: this.active.run.id, input: this.active.run.input, ...(this.active.run.images?.length ? { images: this.active.run.images.length } : {}), ...(this.active.run.files?.length ? { files: this.active.run.files.map(({ name, label, bytes, pages, lines, kind }) => ({ name, label, bytes, kind, ...(pages !== undefined ? { pages } : {}), ...(lines !== undefined ? { lines } : {}) })) } : {}) },
|
|
247
262
|
status: 'running',
|
|
248
263
|
};
|
|
249
264
|
if (latest && !['running', 'completed'].includes(latest.status))
|
|
@@ -260,6 +275,60 @@ export class ThreadRuntime {
|
|
|
260
275
|
for (const listener of this.listeners.get(run.id) ?? [])
|
|
261
276
|
listener(event);
|
|
262
277
|
}
|
|
278
|
+
/** The thread's attachment folder (no session is opened). */
|
|
279
|
+
store(owner, id) {
|
|
280
|
+
const thread = this.thread(owner, id);
|
|
281
|
+
if (!this.host.attachmentsRoot)
|
|
282
|
+
throw new RuntimeFault('files_unavailable', 404);
|
|
283
|
+
if (!thread.agentId || !thread.conversationId)
|
|
284
|
+
throw new RuntimeFault('not_found', 404);
|
|
285
|
+
return new AttachmentStore(this.host.attachmentsRoot, thread.agentId, thread.conversationId);
|
|
286
|
+
}
|
|
287
|
+
/** Files attached to a thread's conversation, oldest first. Archived threads keep their files. */
|
|
288
|
+
files(owner, id) {
|
|
289
|
+
try {
|
|
290
|
+
return this.store(owner, id).list().map(fileSummary);
|
|
291
|
+
}
|
|
292
|
+
catch (error) {
|
|
293
|
+
throw fileFault(error);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
/** One attached file's metadata and bytes, by its exact stored name. */
|
|
297
|
+
file(owner, id, name) {
|
|
298
|
+
try {
|
|
299
|
+
return this.store(owner, id).read(name);
|
|
300
|
+
}
|
|
301
|
+
catch (error) {
|
|
302
|
+
throw fileFault(error);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Validate an upload (type by content, size, PDF text) and stage it until a
|
|
307
|
+
* run sends it. Not tied to a thread yet: a new chat uploads before it exists.
|
|
308
|
+
*/
|
|
309
|
+
async upload(owner, name, bytes, signal) {
|
|
310
|
+
this.authorize(owner);
|
|
311
|
+
if (!this.uploads)
|
|
312
|
+
throw new RuntimeFault('files_unavailable', 404);
|
|
313
|
+
if (typeof name !== 'string' || !name.trim() || name.length > 1024)
|
|
314
|
+
throw new RuntimeFault('file_name_invalid', 400);
|
|
315
|
+
// Each upload may parse a PDF in a worker; bound how many run at once.
|
|
316
|
+
if (this.uploading >= ThreadRuntime.MAX_CONCURRENT_UPLOADS)
|
|
317
|
+
throw new RuntimeFault('uploads_busy', 429);
|
|
318
|
+
this.uploading++;
|
|
319
|
+
try {
|
|
320
|
+
return fileSummary(await this.uploads.stage(name, bytes, { signal }));
|
|
321
|
+
}
|
|
322
|
+
catch (error) {
|
|
323
|
+
throw fileFault(error);
|
|
324
|
+
}
|
|
325
|
+
finally {
|
|
326
|
+
this.uploading--;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
/** Uploads validated at the same time; more are refused with `uploads_busy` (429). */
|
|
330
|
+
static MAX_CONCURRENT_UPLOADS = 3;
|
|
331
|
+
uploading = 0;
|
|
263
332
|
/**
|
|
264
333
|
* Start one turn. Text, images or both; images are validated (type by
|
|
265
334
|
* content, size, count, total) and fail with a fixed `image_*` code.
|
|
@@ -267,7 +336,8 @@ export class ThreadRuntime {
|
|
|
267
336
|
*/
|
|
268
337
|
async start(owner, input) {
|
|
269
338
|
this.authorize(owner);
|
|
270
|
-
if (!input || typeof input !== 'object' || !uuid.test(input.id) || typeof input.text !== 'string' || input.text.length > MAX_INPUT_CHARACTERS || (input.parentRunId !== null && !uuid.test(input.parentRunId)) || (input.images !== undefined && !Array.isArray(input.images))
|
|
339
|
+
if (!input || typeof input !== 'object' || !uuid.test(input.id) || typeof input.text !== 'string' || input.text.length > MAX_INPUT_CHARACTERS || (input.parentRunId !== null && !uuid.test(input.parentRunId)) || (input.images !== undefined && !Array.isArray(input.images))
|
|
340
|
+
|| (input.files !== undefined && (!Array.isArray(input.files) || input.files.some(id => typeof id !== 'string' || !uuid.test(id)))))
|
|
271
341
|
throw new RuntimeFault('invalid_input', 400);
|
|
272
342
|
let images = [];
|
|
273
343
|
try {
|
|
@@ -276,13 +346,18 @@ export class ThreadRuntime {
|
|
|
276
346
|
catch (error) {
|
|
277
347
|
throw error instanceof ImageInputError ? new RuntimeFault(error.code, error.code === 'image_too_large' || error.code === 'images_too_large' ? 413 : 400) : error;
|
|
278
348
|
}
|
|
279
|
-
|
|
349
|
+
const uploadIds = input.files ?? [];
|
|
350
|
+
if (uploadIds.length && !this.uploads)
|
|
351
|
+
throw new RuntimeFault('files_unavailable', 400);
|
|
352
|
+
if (uploadIds.length > FILE_LIMITS.maxFilesPerMessage)
|
|
353
|
+
throw new RuntimeFault('files_too_many', 400);
|
|
354
|
+
if (!input.text.trim() && !images.length && !uploadIds.length)
|
|
280
355
|
throw new RuntimeFault('invalid_input', 400);
|
|
281
356
|
const imageMetadata = images.map(({ mediaType, bytes, sha256 }) => ({ mediaType, bytes, sha256 }));
|
|
282
357
|
const thread = this.thread(owner, input.threadId);
|
|
283
358
|
const previous = this.state.runs.find(r => r.id === input.id);
|
|
284
359
|
if (previous) {
|
|
285
|
-
if (previous.threadId !== input.threadId || previous.input !== input.text || !sameImages(previous.images, imageMetadata) || previous.parentRunId !== input.parentRunId)
|
|
360
|
+
if (previous.threadId !== input.threadId || previous.input !== input.text || !sameImages(previous.images, imageMetadata) || !sameUploads(previous.uploads, uploadIds) || previous.parentRunId !== input.parentRunId)
|
|
286
361
|
throw new RuntimeFault('id_conflict');
|
|
287
362
|
return { id: previous.id, status: previous.status };
|
|
288
363
|
}
|
|
@@ -295,18 +370,48 @@ export class ThreadRuntime {
|
|
|
295
370
|
throw new RuntimeFault('delivery_uncertain');
|
|
296
371
|
if (this.state.runs.length >= 200)
|
|
297
372
|
throw new RuntimeFault('capacity_reached');
|
|
373
|
+
// Re-validate staged uploads (exist, unchanged, within the per-message count) before opening anything.
|
|
374
|
+
let staged = [];
|
|
375
|
+
try {
|
|
376
|
+
staged = uploadIds.length ? this.uploads.load(uploadIds) : [];
|
|
377
|
+
}
|
|
378
|
+
catch (error) {
|
|
379
|
+
throw fileFault(error);
|
|
380
|
+
}
|
|
298
381
|
return this.exclusive(async () => {
|
|
299
382
|
const session = await this.open(thread);
|
|
383
|
+
// Move the uploads into this conversation's folder (all or none, within its limits) before recording the run.
|
|
384
|
+
let files = [];
|
|
385
|
+
if (staged.length) {
|
|
386
|
+
if (!session.agent.attachments)
|
|
387
|
+
throw new RuntimeFault('files_unavailable', 400);
|
|
388
|
+
try {
|
|
389
|
+
files = session.agent.attachments.store(staged.map(upload => upload.prepared));
|
|
390
|
+
}
|
|
391
|
+
catch (error) {
|
|
392
|
+
throw fileFault(error);
|
|
393
|
+
}
|
|
394
|
+
this.uploads.discard(uploadIds);
|
|
395
|
+
}
|
|
396
|
+
const fileMetadata = files.map(({ name, kind, mediaType, label, bytes, sha256, pages, lines }) => ({ name, kind, mediaType, label, bytes, sha256, ...(pages !== undefined ? { pages } : {}), ...(lines !== undefined ? { lines } : {}) }));
|
|
300
397
|
const startedAt = new Date().toISOString();
|
|
301
|
-
const run = { id: input.id, threadId: input.threadId, input: input.text, ...(imageMetadata.length ? { images: imageMetadata } : {}), parentRunId: input.parentRunId, status: 'running', events: [], startedAt };
|
|
398
|
+
const run = { id: input.id, threadId: input.threadId, input: input.text, ...(imageMetadata.length ? { images: imageMetadata } : {}), ...(fileMetadata.length ? { files: fileMetadata, uploads: uploadIds } : {}), parentRunId: input.parentRunId, status: 'running', events: [], startedAt };
|
|
302
399
|
thread.lastActivityAt = startedAt;
|
|
303
400
|
this.state.runs.push(run);
|
|
304
401
|
this.save();
|
|
305
402
|
const control = new AbortController();
|
|
306
403
|
this.active = { run, control };
|
|
307
|
-
// Exactly the new turn: text (if any)
|
|
308
|
-
const content = images.length
|
|
309
|
-
? [...(input.text.trim() ? [{ type: 'text', text: input.text }] : []),
|
|
404
|
+
// Exactly the new turn: text (if any), the images, then the stored files by reference, in the order given.
|
|
405
|
+
const content = images.length || files.length
|
|
406
|
+
? [...(input.text.trim() ? [{ type: 'text', text: input.text }] : []),
|
|
407
|
+
// With attachments, images are also saved to the folder under their (sanitized) name.
|
|
408
|
+
...images.map((image, index) => {
|
|
409
|
+
const name = input.images?.[index]?.name;
|
|
410
|
+
return typeof name === 'string' && name.trim() && name.length <= 1024 && session.agent.attachments
|
|
411
|
+
? { type: 'file', data: image.base64, mediaType: image.mediaType, filename: name }
|
|
412
|
+
: { type: 'image', image: image.base64, mediaType: image.mediaType };
|
|
413
|
+
}),
|
|
414
|
+
...files.map(file => ({ type: 'file', mediaType: file.mediaType, filename: file.name, data: { type: 'reference', reference: { [IMAGE_REFERENCE_PROVIDER]: file.sha256 } } }))]
|
|
310
415
|
: input.text;
|
|
311
416
|
void this.drive(session, run, control, content);
|
|
312
417
|
return { id: run.id, status: run.status };
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC9G,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,oBAAoB,EAAE,cAAc,EAAE,gBAAgB,EAAyF,MAAM,cAAc,CAAC;AA0BjN,kEAAkE;AAClE,MAAM,OAAO,YAAa,SAAQ,KAAK;IAChB;IAAuB;IAA5C,YAAqB,IAAY,EAAW,SAAS,GAAG;QAAI,KAAK,CAAC,IAAI,CAAC,CAAC;QAAnD,SAAI,GAAJ,IAAI,CAAQ;QAAW,WAAM,GAAN,MAAM,CAAM;IAAiB,CAAC;CAC3E;AACD,MAAM,IAAI,GAAG,iEAAiE,CAAC;AAC/E,yGAAyG;AACzG,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,oBAAoB,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC,CAAC;AACtP,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAAC,IAAI,CAAC;YAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,EAAE,CAAC;QAAC,CAAC;IAAC,CAAC;IAC1F,MAAM,MAAM,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAA6B,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9H,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACpF,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,UAAU,CAAC,GAAQ;IACjC,MAAM,KAAK,GAAuB,EAAE,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM;gBAAE,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;gBACrD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;aACzL,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACzE,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;YAClG,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,IAAI,EAAE,IAAI,KAAK,cAAc,IAAI,IAAI,CAAC,KAAK,KAAK,iBAAiB;gBAAE,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,gBAAgB;oBACnH,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;oBAC7D,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClJ,CAAC;IACH,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;QAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClG,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,IAAI,IAAI,CAAC,KAAK,KAAK,iBAAiB;gBAAE,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,GAAG,CAAC,MAAM,4BAA4B,EAAE,CAAC;QACjL,CAAC;IACD,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACjF,uFAAuF;IACvF,MAAM,IAAI,GAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC;IACpM,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;AACrI,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAgB,EAAE,EAAE,IAAgB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,CAAE,CAAC,MAAM,CAAC,CAAC;AAErJ;;;;;;;GAOG;AACH,MAAM,OAAO,aAAa;IAOK;IAAoC;IAAmC;IAAgC;IAAuC;IANnK,KAAK,CAAQ;IACb,MAAM,GAAG,KAAK,CAAC;IACf,OAAO,CAAkB;IACzB,MAAM,CAA0C;IAChD,OAAO,CAA6F;IACpG,SAAS,GAAG,IAAI,GAAG,EAA8C,CAAC;IAC1E,YAA6B,IAAiB,EAAmB,QAAgB,EAAmB,KAAa,EAAmB,aAAa,OAAO,EAAmB,cAAc,CAAC,GAAG,MAAM;QAAtK,SAAI,GAAJ,IAAI,CAAa;QAAmB,aAAQ,GAAR,QAAQ,CAAQ;QAAmB,UAAK,GAAL,KAAK,CAAQ;QAAmB,eAAU,GAAV,UAAU,CAAU;QAAmB,gBAAW,GAAX,WAAW,CAAa;QACjM,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QAChI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAChJ,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC;QACnE,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChE,GAAG,CAAC,MAAM,GAAG,aAAa,CAAC;gBAC3B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAC;YAC7G,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IACO,IAAI;QACV,mFAAmF;QACnF,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC;YAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;gBAAS,CAAC;YAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;QAChG,UAAU,CAAC,GAAG,IAAI,CAAC,QAAQ,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;QACxD,IAAI,CAAC;YAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAAC,CAAC;gBAAS,CAAC;YAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAAC,CAAC;IACjE,CAAC;IACO,SAAS,CAAC,KAAa,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAChG,MAAM,CAAC,KAAa,EAAE,EAAU;QACtC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QAC9E,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO;YAAE,MAAM,IAAI,YAAY,CAAC,oBAAoB,CAAC,CAAC;QAC3E,OAAO,MAAM,CAAC;IAChB,CAAC;IACO,GAAG,CAAC,KAAa,EAAE,EAAU;QACnC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,OAAO,GAAG,CAAC;IACb,CAAC;IACO,KAAK,CAAC,SAAS,CAAI,EAAoB;QAC7C,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,YAAY,CAAC,cAAc,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC;YAAC,OAAO,MAAM,EAAE,EAAE,CAAC;QAAC,CAAC;gBAAS,CAAC;YAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAAC,CAAC;IAC7D,CAAC;IACO,KAAK,CAAC,IAAI,CAAC,MAAc;QAC/B,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,KAAK,MAAM,CAAC,cAAc;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC;QAC/F,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAAC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACrI,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAClE,IAAI,QAAQ,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,MAAM,IAAI,YAAY,CAAC,mBAAmB,CAAC,CAAC;QAAC,CAAC;QACvH,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,iGAAiG;IACzF,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAU;QAC/E,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC5H,CAAC;IACD,IAAI,CAAC,KAAa;QAChB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,CAAC;IACD,mFAAmF;IACnF,cAAc,CAAC,KAAa,EAAE,EAAU,EAAE,KAAc;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QAC9G,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,UAAU,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QAC9H,MAAM,KAAK,GAAG,KAAgD,CAAC;QAC/D,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QACzB,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,mFAAmF;YACnF,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBAAE,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;YACrI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;gBAAE,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS;YAAE,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QACrH,6EAA6E;QAC7E,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,EAAE,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,cAAc,CAAC,CAAC;QACzH,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS;YAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC1E,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,EAAU,EAAE,KAAa;QACnD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;YAAE,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QACrI,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK;gBAAE,MAAM,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC;YAChG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QAC/C,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG;YAAE,MAAM,IAAI,YAAY,CAAC,kBAAkB,CAAC,CAAC;QACjF,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;YAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,MAAM,GAAW,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC;YACrH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAAC,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;YAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC;YAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACtH,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,EAAU;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;YAC/B,mFAAmF;YACnF,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YAClD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,gBAAgB,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC;QAC5J,CAAC,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,EAAU;QAClC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;gBAC3D,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,gBAAgB,CAAC;gBACrE,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI;gBAC7B,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;gBACpJ,MAAM,EAAE,SAAS;aAClB,CAAC;QACF,IAAI,MAAM,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;YAAE,OAAO;gBACtE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;gBAC5E,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,wBAAwB;aAC1F,CAAC;QACF,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACrH,CAAC;IACO,IAAI,CAAC,GAAQ,EAAE,IAAY,EAAE,IAA6B;QAChE,MAAM,KAAK,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC9D,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACpC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE;YAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC;IACD;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,KAAe;QACxC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,oBAAoB,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QAC7T,IAAI,MAAM,GAAmB,EAAE,CAAC;QAChC,IAAI,CAAC;YAAC,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QACpD,OAAO,KAAK,EAAE,CAAC;YAAC,MAAM,KAAK,YAAY,eAAe,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAAC,CAAC;QACnL,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QACvF,MAAM,aAAa,GAAe,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAC/G,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9D,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,QAAQ,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,QAAQ,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW;gBAAE,MAAM,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC;YAC9M,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QACtD,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ;YAAE,MAAM,IAAI,YAAY,CAAC,iBAAiB,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,IAAI,KAAK,CAAC,WAAW,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,kBAAkB,CAAC,CAAC;QAC3F,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW;YAAE,MAAM,IAAI,YAAY,CAAC,oBAAoB,CAAC,CAAC;QAC1F,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG;YAAE,MAAM,IAAI,YAAY,CAAC,kBAAkB,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;YAC/B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC3C,MAAM,GAAG,GAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;YACrN,MAAM,CAAC,cAAc,GAAG,SAAS,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;YAAC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;YACtE,kFAAkF;YAClF,MAAM,OAAO,GAAgB,MAAM,CAAC,MAAM;gBACxC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAgB,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;gBACtL,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YACf,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAChD,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC;IACO,KAAK,CAAC,KAAK,CAAC,OAAuB,EAAE,GAAQ,EAAE,OAAwB,EAAE,OAAoB;QACnG,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,MAAM,GAAG,GAAG,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QAChC,0EAA0E;QAC1E,+EAA+E;QAC/E,IAAI,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC1C,yEAAyE;QACzE,sEAAsE;QACtE,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QACzE,IAAI,UAAU,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;QAC1B,IAAI,CAAC;YACH,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACnG,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;gBAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC7B,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;gBACvD,MAAM,MAAM,GAAG,GAAG,EAAE;oBAClB,YAAY,CAAC,KAAK,CAAC,CAAC;oBAAC,aAAa,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;oBAC7D,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAAC,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAChE,CAAC,CAAC;gBACF,MAAM,KAAK,GAAG,GAAG,EAAE;oBACjB,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,EAAE,CAAC;wBAC5C,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;wBACzB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;wBACpG,MAAM,EAAE,CAAC;oBACX,CAAC;oBACD,MAAM,CAAC,IAAI,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAC;gBACpD,CAAC,CAAC;gBACF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxD,IAAI,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE;wBACxD,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;wBAC3C,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE;4BAAE,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;wBACtE,MAAM,EAAE,CAAC;wBAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC3B,CAAC,EAAE,CAAC;gBACJ,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBAAC,KAAK,EAAE,CAAC;oBAAC,OAAO;gBAAC,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,OAAO,KAAK,QAAQ;gBACnE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE;gBAClD,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACzG,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;oBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;qBACvE,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;oBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;qBAC9J,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa;oBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;qBACpK,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;oBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;qBAClM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;oBAAE,MAAM,IAAI,YAAY,CAAC,gBAAgB,CAAC,CAAC;YACpG,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,YAAY,CAAC,wBAAwB,CAAC,CAAC;YACrF,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,MAAM,CAAC,YAAY,KAAK,MAAM;gBAAE,MAAM,IAAI,YAAY,CAAC,gBAAgB,CAAC,CAAC;YAC7G,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC7D,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,OAAO,KAAK,wBAAwB,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,gBAAgB,CAAC;YAC3M,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK,GAAG,CAAC,EAAE;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/G,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACrC,CAAC;gBAAS,CAAC;YACT,2EAA2E;YAC3E,4EAA4E;YAC5E,OAAO,CAAC,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YAAC,UAAU,EAAE,CAAC;YAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAAC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QAChH,CAAC;IACH,CAAC;IACD,MAAM,CAAC,KAAa,EAAE,EAAU,EAAE,KAAa;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM;YAAE,MAAM,IAAI,YAAY,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;QAC1H,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IACjE,CAAC;IACD,SAAS,CAAC,EAAU,EAAE,QAAuC;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;QAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAClH,OAAO,GAAG,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;YAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,CAAC;IACD,MAAM,CAAC,KAAa,EAAE,KAAa,EAAE,QAA6B;QAChE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,YAAY,CAAC,mBAAmB,CAAC,CAAC;QACjH,IAAI,KAA0B,CAAC;QAC/B,IAAI,CAAC;YAAC,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;QAAC,CAAC;QACvH,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnF,CAAC;IACD,MAAM,CAAC,KAAa,EAAE,EAAU;QAC9B,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpB,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE;YAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAC9D,CAAC;IACD,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;CACzE"}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/serve.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAqE,KAAK,eAAe,EAAqB,MAAM,cAAc,CAAC;AAI1I,0DAA0D;AAC1D,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,wBAAwB;AACxB,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AA6CD;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,KAAK,SAAS,OAAO,EAAE,UAAU,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAgBlK;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,KAAK,SAAS,OAAO,EAAE,UAAU,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,OAAO,GAAE,YAAY,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,aAAa,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAoB9M;AAED,uFAAuF;AACvF,wBAAgB,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,IAAI,CAIzE"}
|
package/dist/serve.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { closeSync, existsSync, mkdirSync, openSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { randomBytes } from 'node:crypto';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
import { createLettaAgent, resolveStateDirectory, statePaths } from 'ai-sdk-letta';
|
|
4
|
+
import { createLettaAgent, filesEnabled, resolveStateDirectory, statePaths } from 'ai-sdk-letta';
|
|
5
5
|
import { ThreadRuntime } from './runtime.js';
|
|
6
6
|
import { guiApp, tokenApiApp } from './http.js';
|
|
7
7
|
/** Default GUI port (the token API uses the next one). */
|
|
@@ -9,6 +9,7 @@ export const DEFAULT_PORT = 4400;
|
|
|
9
9
|
function host(definition, stateDirectory) {
|
|
10
10
|
let runtime;
|
|
11
11
|
return {
|
|
12
|
+
...(filesEnabled(definition) ? { attachmentsRoot: statePaths(stateDirectory).attachments } : {}),
|
|
12
13
|
open: async (options) => {
|
|
13
14
|
runtime = await createLettaAgent(definition, { ...options, stateDirectory, foregroundExternalTools: true });
|
|
14
15
|
const { agent } = runtime;
|
|
@@ -78,7 +79,7 @@ export async function startGuiServer(definition, assets, options = {}) {
|
|
|
78
79
|
const port = options.port ?? DEFAULT_PORT;
|
|
79
80
|
const owner = 'local-gui';
|
|
80
81
|
const runtime = new ThreadRuntime(host(definition, stateDirectory), join(directory, 'state.json'), owner);
|
|
81
|
-
const server = guiApp(runtime, owner, port, assets, { id: definition.id, name: definition.name, approvalTools: Object.keys(definition.permissions).filter(name => definition.permissions[name] === 'ask') }).listen(port, '127.0.0.1');
|
|
82
|
+
const server = guiApp(runtime, owner, port, assets, { id: definition.id, name: definition.name, approvalTools: Object.keys(definition.permissions).filter(name => definition.permissions[name] === 'ask'), files: filesEnabled(definition) }).listen(port, '127.0.0.1');
|
|
82
83
|
const bound = await listen(server, port);
|
|
83
84
|
const url = `http://127.0.0.1:${bound}`;
|
|
84
85
|
log(`${definition.name} GUI: ${url}\nDefinition: ${definition.id} · state: ${stateDirectory}\nPID ${process.pid}. Stop with Ctrl-C or SIGTERM.`);
|
package/dist/serve.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9G,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,UAAU,EAA2C,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk-letta/server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Local HTTP runtime for ai-sdk-letta agents: durable threads and runs, NDJSON events, a token API and a loopback browser app.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Leonard Schneider",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"@types/express": "^5.0.6",
|
|
58
|
-
"ai-sdk-letta": "^0.
|
|
58
|
+
"ai-sdk-letta": "^0.2.0",
|
|
59
59
|
"express": "^5.2.1"
|
|
60
60
|
},
|
|
61
61
|
"peerDependencies": {
|
package/src/http.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
2
|
import { randomBytes, timingSafeEqual } from 'node:crypto';
|
|
3
|
-
import { IMAGE_LIMITS, IMAGE_MEDIA_TYPES } from 'ai-sdk-letta';
|
|
3
|
+
import { FILE_LIMITS, IMAGE_LIMITS, IMAGE_MEDIA_TYPES, TEXT_EXTENSIONS } from 'ai-sdk-letta';
|
|
4
4
|
import type { RuntimeEvent, ThreadRuntime } from './runtime.js';
|
|
5
5
|
import { RuntimeFault } from './runtime.js';
|
|
6
6
|
|
|
@@ -29,14 +29,56 @@ export const BODY_LIMIT_BYTES = 24 * 1024;
|
|
|
29
29
|
* enforced again on the decoded bytes.
|
|
30
30
|
*/
|
|
31
31
|
export const RUN_BODY_LIMIT_BYTES = Math.ceil(IMAGE_LIMITS.maxTotalBytes / 3) * 4 + 64 * 1024;
|
|
32
|
+
/**
|
|
33
|
+
* Body limit for `POST /v1/uploads` only: one file's raw bytes
|
|
34
|
+
* (`application/octet-stream`, not base64), at most `FILE_LIMITS.maxFileBytes`.
|
|
35
|
+
*/
|
|
36
|
+
export const UPLOAD_BODY_LIMIT_BYTES = FILE_LIMITS.maxFileBytes;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* `Content-Disposition` for a download: always `attachment`, with an ASCII
|
|
40
|
+
* fallback name and the exact UTF-8 name (RFC 6266 / 5987). Quotes, control
|
|
41
|
+
* characters and path separators never reach the header.
|
|
42
|
+
*/
|
|
43
|
+
export function contentDisposition(name: string): string {
|
|
44
|
+
const fallback = name.normalize('NFKD').replace(/[^\x20-\x7e]/g, '').replace(/["\\/;%]/g, '_').trim() || 'download';
|
|
45
|
+
const encoded = encodeURIComponent(name).replace(/['()*]/g, c => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
|
|
46
|
+
return `attachment; filename="${fallback}"; filename*=UTF-8''${encoded}`;
|
|
47
|
+
}
|
|
48
|
+
/** Content type for a download: text is always served as plain text, never as HTML or script. */
|
|
49
|
+
const downloadType = (file: { kind: string; mediaType: string }) => file.kind === 'pdf' ? 'application/pdf' : file.kind === 'image' ? file.mediaType : file.mediaType === 'text/csv' ? 'text/csv; charset=utf-8' : 'text/plain; charset=utf-8';
|
|
32
50
|
|
|
33
51
|
/** Shared routes; the caller must install its transport-specific authentication first. */
|
|
34
52
|
export function runtimeRoutes(app: express.Express, runtime: ThreadRuntime, owner: string, shutdown?: () => Promise<void>) {
|
|
35
53
|
const small = express.json({ limit: BODY_LIMIT_BYTES });
|
|
36
54
|
const runs = express.json({ limit: RUN_BODY_LIMIT_BYTES });
|
|
37
|
-
|
|
55
|
+
// Raw bytes, only on the upload route, only as application/octet-stream, bounded by the per-file limit.
|
|
56
|
+
const upload = express.raw({ limit: UPLOAD_BODY_LIMIT_BYTES, type: 'application/octet-stream' });
|
|
57
|
+
app.use((req, res, next) => (req.method === 'POST' && req.path === '/v1/runs' ? runs : req.method === 'POST' && req.path === '/v1/uploads' ? upload : small)(req, res, next));
|
|
38
58
|
app.get('/v1/capabilities', (_req, res) => res.json({ version: 1, stateful: true, tools: 'observed-only', interactions: ['approval', 'question'], history: true, replay: true, concurrency: 1, edits: false,
|
|
39
|
-
images: { mediaTypes: [...IMAGE_MEDIA_TYPES], maxImageBytes: IMAGE_LIMITS.maxImageBytes, maxImages: IMAGE_LIMITS.maxImages, maxTotalBytes: IMAGE_LIMITS.maxTotalBytes }
|
|
59
|
+
images: { mediaTypes: [...IMAGE_MEDIA_TYPES], maxImageBytes: IMAGE_LIMITS.maxImageBytes, maxImages: IMAGE_LIMITS.maxImages, maxTotalBytes: IMAGE_LIMITS.maxTotalBytes },
|
|
60
|
+
files: runtime.uploads ? { types: ['text', 'pdf', 'image'], textExtensions: [...TEXT_EXTENSIONS], maxFileBytes: FILE_LIMITS.maxFileBytes, maxFilesPerMessage: FILE_LIMITS.maxFilesPerMessage, maxConversationFiles: FILE_LIMITS.maxConversationFiles, maxConversationBytes: FILE_LIMITS.maxConversationBytes } : null }));
|
|
61
|
+
/**
|
|
62
|
+
* Stage one file for the next run: raw bytes as `application/octet-stream`,
|
|
63
|
+
* the name URL-encoded in `X-File-Name`. Validated by content (type, size,
|
|
64
|
+
* PDF text) before anything is kept. Returns `{ id, name, kind, ... }`.
|
|
65
|
+
*/
|
|
66
|
+
app.post('/v1/uploads', async (req, res) => {
|
|
67
|
+
if (!req.is('application/octet-stream') || !Buffer.isBuffer(req.body)) throw new RuntimeFault('invalid_input', 415);
|
|
68
|
+
let name: string;
|
|
69
|
+
try { name = decodeURIComponent(String(req.headers['x-file-name'] ?? '')); } catch { throw new RuntimeFault('file_name_invalid', 400); }
|
|
70
|
+
const control = new AbortController();
|
|
71
|
+
res.on('close', () => { if (!res.writableEnded) control.abort(); });
|
|
72
|
+
res.status(201).json(await runtime.upload(owner, name, req.body, control.signal));
|
|
73
|
+
});
|
|
74
|
+
app.get('/v1/threads/:id/files', (req, res) => res.json(runtime.files(owner, req.params.id)));
|
|
75
|
+
/** Download one attached file. Always as an attachment, never rendered by the app's origin. */
|
|
76
|
+
app.get('/v1/threads/:id/files/:name', (req, res) => {
|
|
77
|
+
const { file, bytes } = runtime.file(owner, req.params.id, req.params.name);
|
|
78
|
+
res.set({ 'Content-Type': downloadType(file), 'Content-Disposition': contentDisposition(file.name), 'Content-Length': String(bytes.byteLength),
|
|
79
|
+
'Cross-Origin-Resource-Policy': 'same-origin', 'Content-Security-Policy': "default-src 'none'; sandbox", 'Cache-Control': 'private, no-store' });
|
|
80
|
+
res.end(bytes);
|
|
81
|
+
});
|
|
40
82
|
app.get('/v1/threads', (_req, res) => res.json(runtime.list(owner)));
|
|
41
83
|
app.post('/v1/threads', async (req, res) => res.status(201).json(await runtime.create(owner, req.body?.id, req.body?.title)));
|
|
42
84
|
app.patch('/v1/threads/:id', (req, res) => res.json(runtime.updateMetadata(owner, req.params.id, req.body)));
|
|
@@ -61,6 +103,7 @@ export function runtimeRoutes(app: express.Express, runtime: ThreadRuntime, owne
|
|
|
61
103
|
if (res.headersSent) return res.end();
|
|
62
104
|
// Body parser rejections: fixed codes, never parser messages.
|
|
63
105
|
if ((error as { type?: unknown } | undefined)?.type === 'entity.too.large') return res.status(413).json({ error: 'payload_too_large' });
|
|
106
|
+
if ((error as { type?: unknown } | undefined)?.type === 'request.aborted') return res.end();
|
|
64
107
|
res.status(error instanceof RuntimeFault ? error.status : error instanceof SyntaxError ? 400 : 503).json({ error: error instanceof RuntimeFault ? error.code : 'runtime_unavailable' });
|
|
65
108
|
});
|
|
66
109
|
return app;
|
|
@@ -72,6 +115,8 @@ export interface GuiAgentInfo {
|
|
|
72
115
|
name: string;
|
|
73
116
|
/** Tools whose calls always ask for approval (used for display only). */
|
|
74
117
|
approvalTools?: readonly string[];
|
|
118
|
+
/** Whether the agent accepts file attachments (it has the file tools). */
|
|
119
|
+
files?: boolean;
|
|
75
120
|
}
|
|
76
121
|
|
|
77
122
|
/**
|
|
@@ -95,7 +140,7 @@ export function guiApp(runtime: ThreadRuntime, owner: string, port: number, asse
|
|
|
95
140
|
});
|
|
96
141
|
app.get('/api/session', (_req, res) => {
|
|
97
142
|
res.cookie('ai_sdk_letta_session', session, { httpOnly: true, sameSite: 'strict', path: '/' });
|
|
98
|
-
res.json({ csrf, agent: { id: agent.id, name: agent.name, approvalTools: [...(agent.approvalTools ?? [])] } });
|
|
143
|
+
res.json({ csrf, agent: { id: agent.id, name: agent.name, approvalTools: [...(agent.approvalTools ?? [])], files: !!agent.files } });
|
|
99
144
|
});
|
|
100
145
|
app.use('/api', (req, res, next) => {
|
|
101
146
|
const cookie = req.headers.cookie?.split(';').map(s => s.trim()).find(s => s.startsWith('ai_sdk_letta_session='))?.slice('ai_sdk_letta_session='.length);
|
package/src/index.ts
CHANGED
|
@@ -4,6 +4,6 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @packageDocumentation
|
|
6
6
|
*/
|
|
7
|
-
export { ThreadRuntime, RuntimeFault, displayRun, toolFailureReason, type RuntimeEvent, type Run, type RunImage, type RunInput, type RuntimeHost, type RuntimeSession } from './runtime.js';
|
|
8
|
-
export { guiApp, tokenApiApp, runtimeRoutes, BODY_LIMIT_BYTES, RUN_BODY_LIMIT_BYTES, type GuiAgentInfo } from './http.js';
|
|
7
|
+
export { ThreadRuntime, RuntimeFault, displayRun, toolFailureReason, fileFault, fileSummary, type RuntimeEvent, type Run, type RunImage, type RunFile, type RunInput, type RuntimeHost, type RuntimeSession } from './runtime.js';
|
|
8
|
+
export { guiApp, tokenApiApp, runtimeRoutes, contentDisposition, BODY_LIMIT_BYTES, RUN_BODY_LIMIT_BYTES, UPLOAD_BODY_LIMIT_BYTES, type GuiAgentInfo } from './http.js';
|
|
9
9
|
export { startGuiServer, startApiServer, closeOnSignals, DEFAULT_PORT, type ServeOptions, type RunningServer } from './serve.js';
|
package/src/runtime.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { readFileSync, writeFileSync, renameSync, existsSync, openSync, closeSync, fsyncSync } from 'node:fs';
|
|
2
|
-
import { dirname } from 'node:path';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
3
|
import type { UIMessage, UserContent } from 'ai';
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
AttachmentStore, FILE_LIMITS, FileInputError, IMAGE_PLACEHOLDER, IMAGE_REFERENCE_PROVIDER, ImageInputError, MAX_INPUT_CHARACTERS, UploadStaging, attachmentNote, validateImages, validateResponse,
|
|
6
|
+
type DecodedImage, type InteractionRequest, type InteractionResponse, type LettaAgent, type StagedFile, type StoredFile,
|
|
7
|
+
} from 'ai-sdk-letta';
|
|
5
8
|
|
|
6
9
|
/** One NDJSON event of a run. The application, never the HTTP consumer, owns tools. */
|
|
7
10
|
export type RuntimeEvent = { sequence: number; type: string; data: Record<string, unknown> };
|
|
@@ -10,9 +13,15 @@ type Thread = { id: string; owner: string; conversationId?: string; agentId?: st
|
|
|
10
13
|
/** Metadata of an image sent with a run. The bytes live only in Letta history, never in runtime state. */
|
|
11
14
|
export type RunImage = { mediaType: string; bytes: number; sha256: string };
|
|
12
15
|
/** A single user turn and the events observed while it ran. */
|
|
13
|
-
export type Run = { id: string; threadId: string; input: string; images?: RunImage[]; parentRunId: string | null; status: 'running' | 'completed' | 'failed' | 'cancelled' | 'interrupted'; events: RuntimeEvent[]; startedAt?: string };
|
|
14
|
-
/**
|
|
15
|
-
export type
|
|
16
|
+
export type Run = { id: string; threadId: string; input: string; images?: RunImage[]; files?: RunFile[]; uploads?: string[]; parentRunId: string | null; status: 'running' | 'completed' | 'failed' | 'cancelled' | 'interrupted'; events: RuntimeEvent[]; startedAt?: string };
|
|
17
|
+
/** Metadata of a file sent with a run (as stored in the conversation's folder). */
|
|
18
|
+
export type RunFile = Pick<StoredFile, 'name' | 'kind' | 'mediaType' | 'label' | 'bytes' | 'sha256' | 'pages' | 'lines'>;
|
|
19
|
+
/**
|
|
20
|
+
* Input of `POST /v1/runs`. `images` carry base64 data (no data: prefix) and
|
|
21
|
+
* are validated against `IMAGE_LIMITS`. `files` are upload IDs returned by
|
|
22
|
+
* `POST /v1/uploads` (at most `FILE_LIMITS.maxFilesPerMessage`).
|
|
23
|
+
*/
|
|
24
|
+
export type RunInput = { id: string; threadId: string; text: string; parentRunId: string | null; images?: { mediaType: string; data: string; name?: string }[]; files?: string[] };
|
|
16
25
|
type State = { version: 1; threads: Thread[]; runs: Run[] };
|
|
17
26
|
/** An opened agent conversation as seen by the runtime. */
|
|
18
27
|
export interface RuntimeSession {
|
|
@@ -20,12 +29,18 @@ export interface RuntimeSession {
|
|
|
20
29
|
conversationId: string;
|
|
21
30
|
history: UIMessage[];
|
|
22
31
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
23
|
-
agent: Pick<LettaAgent<any>, 'stream' | 'interactions' | 'transcript'
|
|
32
|
+
agent: Pick<LettaAgent<any>, 'stream' | 'interactions' | 'transcript'> & { attachments?: AttachmentStore };
|
|
24
33
|
}
|
|
25
34
|
/** Opens and closes the single agent session the runtime drives. */
|
|
26
35
|
export interface RuntimeHost {
|
|
27
36
|
open(options: { conversationId: string } | { newTitle: string }): Promise<RuntimeSession>;
|
|
28
37
|
close(): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Root of the per-conversation attachment folders, when the agent accepts
|
|
40
|
+
* files (its definition includes the file tools). Without it, uploads and
|
|
41
|
+
* file lists are refused with `files_unavailable`.
|
|
42
|
+
*/
|
|
43
|
+
attachmentsRoot?: string;
|
|
29
44
|
}
|
|
30
45
|
/** A client-visible failure with a fixed code and HTTP status. */
|
|
31
46
|
export class RuntimeFault extends Error {
|
|
@@ -34,6 +49,13 @@ export class RuntimeFault extends Error {
|
|
|
34
49
|
const uuid = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i;
|
|
35
50
|
/** Only app-defined, fixed failure codes (e.g. user_denied) are surfaced; never free-form error text. */
|
|
36
51
|
const failureReasons = new Set(['user_denied', 'approval_cancelled', 'tool_denied', 'tool_cancelled', 'tool_timeout', 'tool_failed', 'invalid_arguments', 'interaction_unavailable', 'permission_denied', 'duplicate_or_limit', 'tool_output_limit']);
|
|
52
|
+
/** HTTP status for a refused file. */
|
|
53
|
+
const fileStatus = (code: string) => code === 'file_too_large' ? 413 : code === 'file_not_found' ? 404 : code === 'conversation_files_full' || code === 'files_too_many' ? 409 : 400;
|
|
54
|
+
/** A FileInputError as a fixed-code RuntimeFault; anything else unchanged. */
|
|
55
|
+
export const fileFault = (error: unknown) => error instanceof FileInputError ? new RuntimeFault(error.code, fileStatus(error.code)) : error;
|
|
56
|
+
/** Public metadata of a stored file (what list and upload return). */
|
|
57
|
+
export const fileSummary = (file: StoredFile | StagedFile) => ({ ...('id' in file ? { id: file.id } : {}), name: file.name, kind: file.kind, mediaType: file.mediaType, label: file.label, bytes: file.bytes,
|
|
58
|
+
...(file.pages !== undefined ? { pages: file.pages } : {}), ...(file.lines !== undefined ? { lines: file.lines } : {}), createdAt: file.createdAt });
|
|
37
59
|
export function toolFailureReason(error: unknown): { reason?: string } {
|
|
38
60
|
let value = error;
|
|
39
61
|
if (typeof value === 'string') { try { value = JSON.parse(value); } catch { return {}; } }
|
|
@@ -65,11 +87,15 @@ export function displayRun(run: Run): UIMessage[] {
|
|
|
65
87
|
}
|
|
66
88
|
const metadata = run.startedAt ? { metadata: { createdAt: run.startedAt } } : {};
|
|
67
89
|
// Runtime state never stores image bytes; failed/reconnecting runs show a placeholder.
|
|
68
|
-
|
|
90
|
+
// Files are shown by the same "Attached: ..." note the agent received.
|
|
91
|
+
const note = run.files?.length ? attachmentNote(run.files) : '';
|
|
92
|
+
const text = note ? `${run.input.trimEnd()}${run.input.trim() ? '\n\n' : ''}${note}` : run.input;
|
|
93
|
+
const user: UIMessage['parts'] = [...(text.trim() ? [{ type: 'text' as const, text }] : []), ...(run.images ?? []).map(() => ({ type: 'text' as const, text: IMAGE_PLACEHOLDER }))];
|
|
69
94
|
return [{ id: `${run.id}-user`, role: 'user', parts: user, ...metadata }, { id: `${run.id}-assistant`, role: 'assistant', parts }];
|
|
70
95
|
}
|
|
71
96
|
|
|
72
97
|
const sameImages = (a: RunImage[] = [], b: RunImage[] = []) => a.length === b.length && a.every((image, index) => image.sha256 === b[index]!.sha256);
|
|
98
|
+
const sameUploads = (a: string[] = [], b: string[] = []) => a.length === b.length && a.every((id, index) => id === b[index]);
|
|
73
99
|
|
|
74
100
|
/**
|
|
75
101
|
* Single-owner, single-turn thread service over one agent.
|
|
@@ -86,7 +112,10 @@ export class ThreadRuntime {
|
|
|
86
112
|
private active?: { run: Run; control: AbortController };
|
|
87
113
|
private pending?: { runId: string; request: InteractionRequest; resolve(value: InteractionResponse): void };
|
|
88
114
|
private listeners = new Map<string, Set<(event: RuntimeEvent) => void>>();
|
|
115
|
+
/** Validated uploads waiting to be sent, next to this runtime's state (`<dir>/uploads/.staging`). */
|
|
116
|
+
readonly uploads?: UploadStaging;
|
|
89
117
|
constructor(private readonly host: RuntimeHost, private readonly filename: string, private readonly owner: string, private readonly deadlineMs = 180_000, private readonly humanWaitMs = 4 * 60_000) {
|
|
118
|
+
if (host.attachmentsRoot) this.uploads = new UploadStaging(join(dirname(filename), 'uploads'));
|
|
90
119
|
this.state = existsSync(filename) ? JSON.parse(readFileSync(filename, 'utf8')) as State : { version: 1, threads: [], runs: [] };
|
|
91
120
|
if (this.state.version !== 1 || !Array.isArray(this.state.threads) || !Array.isArray(this.state.runs)) throw new Error('Invalid runtime state');
|
|
92
121
|
for (const thread of this.state.threads) thread.archived ??= false;
|
|
@@ -196,7 +225,7 @@ export class ThreadRuntime {
|
|
|
196
225
|
if (this.active?.run.threadId === id && this.current) return {
|
|
197
226
|
messages: this.current.history.filter(m => m.id !== 'session-status'),
|
|
198
227
|
lastRunId: latest?.id ?? null,
|
|
199
|
-
live: { id: this.active.run.id, input: this.active.run.input, ...(this.active.run.images?.length ? { images: this.active.run.images.length } : {}) },
|
|
228
|
+
live: { id: this.active.run.id, input: this.active.run.input, ...(this.active.run.images?.length ? { images: this.active.run.images.length } : {}), ...(this.active.run.files?.length ? { files: this.active.run.files.map(({ name, label, bytes, pages, lines, kind }) => ({ name, label, bytes, kind, ...(pages !== undefined ? { pages } : {}), ...(lines !== undefined ? { lines } : {}) })) } : {}) },
|
|
200
229
|
status: 'running',
|
|
201
230
|
};
|
|
202
231
|
if (latest && !['running', 'completed'].includes(latest.status)) return {
|
|
@@ -210,6 +239,38 @@ export class ThreadRuntime {
|
|
|
210
239
|
run.events.push(event); this.save();
|
|
211
240
|
for (const listener of this.listeners.get(run.id) ?? []) listener(event);
|
|
212
241
|
}
|
|
242
|
+
/** The thread's attachment folder (no session is opened). */
|
|
243
|
+
private store(owner: string, id: string) {
|
|
244
|
+
const thread = this.thread(owner, id);
|
|
245
|
+
if (!this.host.attachmentsRoot) throw new RuntimeFault('files_unavailable', 404);
|
|
246
|
+
if (!thread.agentId || !thread.conversationId) throw new RuntimeFault('not_found', 404);
|
|
247
|
+
return new AttachmentStore(this.host.attachmentsRoot, thread.agentId, thread.conversationId);
|
|
248
|
+
}
|
|
249
|
+
/** Files attached to a thread's conversation, oldest first. Archived threads keep their files. */
|
|
250
|
+
files(owner: string, id: string) {
|
|
251
|
+
try { return this.store(owner, id).list().map(fileSummary); } catch (error) { throw fileFault(error); }
|
|
252
|
+
}
|
|
253
|
+
/** One attached file's metadata and bytes, by its exact stored name. */
|
|
254
|
+
file(owner: string, id: string, name: string) {
|
|
255
|
+
try { return this.store(owner, id).read(name); } catch (error) { throw fileFault(error); }
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Validate an upload (type by content, size, PDF text) and stage it until a
|
|
259
|
+
* run sends it. Not tied to a thread yet: a new chat uploads before it exists.
|
|
260
|
+
*/
|
|
261
|
+
async upload(owner: string, name: unknown, bytes: Uint8Array, signal?: AbortSignal) {
|
|
262
|
+
this.authorize(owner);
|
|
263
|
+
if (!this.uploads) throw new RuntimeFault('files_unavailable', 404);
|
|
264
|
+
if (typeof name !== 'string' || !name.trim() || name.length > 1024) throw new RuntimeFault('file_name_invalid', 400);
|
|
265
|
+
// Each upload may parse a PDF in a worker; bound how many run at once.
|
|
266
|
+
if (this.uploading >= ThreadRuntime.MAX_CONCURRENT_UPLOADS) throw new RuntimeFault('uploads_busy', 429);
|
|
267
|
+
this.uploading++;
|
|
268
|
+
try { return fileSummary(await this.uploads.stage(name, bytes, { signal })); } catch (error) { throw fileFault(error); }
|
|
269
|
+
finally { this.uploading--; }
|
|
270
|
+
}
|
|
271
|
+
/** Uploads validated at the same time; more are refused with `uploads_busy` (429). */
|
|
272
|
+
static readonly MAX_CONCURRENT_UPLOADS = 3;
|
|
273
|
+
private uploading = 0;
|
|
213
274
|
/**
|
|
214
275
|
* Start one turn. Text, images or both; images are validated (type by
|
|
215
276
|
* content, size, count, total) and fail with a fixed `image_*` code.
|
|
@@ -217,16 +278,20 @@ export class ThreadRuntime {
|
|
|
217
278
|
*/
|
|
218
279
|
async start(owner: string, input: RunInput) {
|
|
219
280
|
this.authorize(owner);
|
|
220
|
-
if (!input || typeof input !== 'object' || !uuid.test(input.id) || typeof input.text !== 'string' || input.text.length > MAX_INPUT_CHARACTERS || (input.parentRunId !== null && !uuid.test(input.parentRunId)) || (input.images !== undefined && !Array.isArray(input.images))
|
|
281
|
+
if (!input || typeof input !== 'object' || !uuid.test(input.id) || typeof input.text !== 'string' || input.text.length > MAX_INPUT_CHARACTERS || (input.parentRunId !== null && !uuid.test(input.parentRunId)) || (input.images !== undefined && !Array.isArray(input.images))
|
|
282
|
+
|| (input.files !== undefined && (!Array.isArray(input.files) || input.files.some(id => typeof id !== 'string' || !uuid.test(id))))) throw new RuntimeFault('invalid_input', 400);
|
|
221
283
|
let images: DecodedImage[] = [];
|
|
222
284
|
try { images = validateImages(input.images ?? []); }
|
|
223
285
|
catch (error) { throw error instanceof ImageInputError ? new RuntimeFault(error.code, error.code === 'image_too_large' || error.code === 'images_too_large' ? 413 : 400) : error; }
|
|
224
|
-
|
|
286
|
+
const uploadIds = input.files ?? [];
|
|
287
|
+
if (uploadIds.length && !this.uploads) throw new RuntimeFault('files_unavailable', 400);
|
|
288
|
+
if (uploadIds.length > FILE_LIMITS.maxFilesPerMessage) throw new RuntimeFault('files_too_many', 400);
|
|
289
|
+
if (!input.text.trim() && !images.length && !uploadIds.length) throw new RuntimeFault('invalid_input', 400);
|
|
225
290
|
const imageMetadata: RunImage[] = images.map(({ mediaType, bytes, sha256 }) => ({ mediaType, bytes, sha256 }));
|
|
226
291
|
const thread = this.thread(owner, input.threadId);
|
|
227
292
|
const previous = this.state.runs.find(r => r.id === input.id);
|
|
228
293
|
if (previous) {
|
|
229
|
-
if (previous.threadId !== input.threadId || previous.input !== input.text || !sameImages(previous.images, imageMetadata) || previous.parentRunId !== input.parentRunId) throw new RuntimeFault('id_conflict');
|
|
294
|
+
if (previous.threadId !== input.threadId || previous.input !== input.text || !sameImages(previous.images, imageMetadata) || !sameUploads(previous.uploads, uploadIds) || previous.parentRunId !== input.parentRunId) throw new RuntimeFault('id_conflict');
|
|
230
295
|
return { id: previous.id, status: previous.status };
|
|
231
296
|
}
|
|
232
297
|
if (thread.archived) throw new RuntimeFault('thread_archived');
|
|
@@ -234,16 +299,35 @@ export class ThreadRuntime {
|
|
|
234
299
|
if (input.parentRunId !== (latest?.id ?? null)) throw new RuntimeFault('history_conflict');
|
|
235
300
|
if (latest && latest.status !== 'completed') throw new RuntimeFault('delivery_uncertain');
|
|
236
301
|
if (this.state.runs.length >= 200) throw new RuntimeFault('capacity_reached');
|
|
302
|
+
// Re-validate staged uploads (exist, unchanged, within the per-message count) before opening anything.
|
|
303
|
+
let staged: ReturnType<UploadStaging['load']> = [];
|
|
304
|
+
try { staged = uploadIds.length ? this.uploads!.load(uploadIds) : []; } catch (error) { throw fileFault(error); }
|
|
237
305
|
return this.exclusive(async () => {
|
|
238
306
|
const session = await this.open(thread);
|
|
307
|
+
// Move the uploads into this conversation's folder (all or none, within its limits) before recording the run.
|
|
308
|
+
let files: StoredFile[] = [];
|
|
309
|
+
if (staged.length) {
|
|
310
|
+
if (!session.agent.attachments) throw new RuntimeFault('files_unavailable', 400);
|
|
311
|
+
try { files = session.agent.attachments.store(staged.map(upload => upload.prepared)); } catch (error) { throw fileFault(error); }
|
|
312
|
+
this.uploads!.discard(uploadIds);
|
|
313
|
+
}
|
|
314
|
+
const fileMetadata: RunFile[] = files.map(({ name, kind, mediaType, label, bytes, sha256, pages, lines }) => ({ name, kind, mediaType, label, bytes, sha256, ...(pages !== undefined ? { pages } : {}), ...(lines !== undefined ? { lines } : {}) }));
|
|
239
315
|
const startedAt = new Date().toISOString();
|
|
240
|
-
const run: Run = { id: input.id, threadId: input.threadId, input: input.text, ...(imageMetadata.length ? { images: imageMetadata } : {}), parentRunId: input.parentRunId, status: 'running', events: [], startedAt };
|
|
316
|
+
const run: Run = { id: input.id, threadId: input.threadId, input: input.text, ...(imageMetadata.length ? { images: imageMetadata } : {}), ...(fileMetadata.length ? { files: fileMetadata, uploads: uploadIds } : {}), parentRunId: input.parentRunId, status: 'running', events: [], startedAt };
|
|
241
317
|
thread.lastActivityAt = startedAt;
|
|
242
318
|
this.state.runs.push(run); this.save();
|
|
243
319
|
const control = new AbortController(); this.active = { run, control };
|
|
244
|
-
// Exactly the new turn: text (if any)
|
|
245
|
-
const content: UserContent = images.length
|
|
246
|
-
? [...(input.text.trim() ? [{ type: 'text' as const, text: input.text }] : []),
|
|
320
|
+
// Exactly the new turn: text (if any), the images, then the stored files by reference, in the order given.
|
|
321
|
+
const content: UserContent = images.length || files.length
|
|
322
|
+
? [...(input.text.trim() ? [{ type: 'text' as const, text: input.text }] : []),
|
|
323
|
+
// With attachments, images are also saved to the folder under their (sanitized) name.
|
|
324
|
+
...images.map((image, index) => {
|
|
325
|
+
const name = input.images?.[index]?.name;
|
|
326
|
+
return typeof name === 'string' && name.trim() && name.length <= 1024 && session.agent.attachments
|
|
327
|
+
? { type: 'file' as const, data: image.base64, mediaType: image.mediaType, filename: name }
|
|
328
|
+
: { type: 'image' as const, image: image.base64, mediaType: image.mediaType };
|
|
329
|
+
}),
|
|
330
|
+
...files.map(file => ({ type: 'file' as const, mediaType: file.mediaType, filename: file.name, data: { type: 'reference' as const, reference: { [IMAGE_REFERENCE_PROVIDER]: file.sha256 } } }))]
|
|
247
331
|
: input.text;
|
|
248
332
|
void this.drive(session, run, control, content);
|
|
249
333
|
return { id: run.id, status: run.status };
|
package/src/serve.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { randomBytes } from 'node:crypto';
|
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import type { Server } from 'node:http';
|
|
5
5
|
import type { ToolSet } from 'ai';
|
|
6
|
-
import { createLettaAgent, resolveStateDirectory, statePaths, type AgentDefinition, type LettaRuntime } from 'ai-sdk-letta';
|
|
6
|
+
import { createLettaAgent, filesEnabled, resolveStateDirectory, statePaths, type AgentDefinition, type LettaRuntime } from 'ai-sdk-letta';
|
|
7
7
|
import { ThreadRuntime, type RuntimeHost } from './runtime.js';
|
|
8
8
|
import { guiApp, tokenApiApp } from './http.js';
|
|
9
9
|
|
|
@@ -31,6 +31,7 @@ export interface RunningServer {
|
|
|
31
31
|
function host<TOOLS extends ToolSet>(definition: AgentDefinition<TOOLS>, stateDirectory: string): RuntimeHost {
|
|
32
32
|
let runtime: LettaRuntime<TOOLS> | undefined;
|
|
33
33
|
return {
|
|
34
|
+
...(filesEnabled(definition) ? { attachmentsRoot: statePaths(stateDirectory).attachments } : {}),
|
|
34
35
|
open: async options => {
|
|
35
36
|
runtime = await createLettaAgent(definition, { ...options, stateDirectory, foregroundExternalTools: true });
|
|
36
37
|
const { agent } = runtime;
|
|
@@ -86,7 +87,7 @@ export async function startGuiServer<TOOLS extends ToolSet>(definition: AgentDef
|
|
|
86
87
|
const port = options.port ?? DEFAULT_PORT;
|
|
87
88
|
const owner = 'local-gui';
|
|
88
89
|
const runtime = new ThreadRuntime(host(definition, stateDirectory), join(directory, 'state.json'), owner);
|
|
89
|
-
const server = guiApp(runtime, owner, port, assets, { id: definition.id, name: definition.name, approvalTools: Object.keys(definition.permissions).filter(name => definition.permissions[name] === 'ask') }).listen(port, '127.0.0.1');
|
|
90
|
+
const server = guiApp(runtime, owner, port, assets, { id: definition.id, name: definition.name, approvalTools: Object.keys(definition.permissions).filter(name => definition.permissions[name] === 'ask'), files: filesEnabled(definition) }).listen(port, '127.0.0.1');
|
|
90
91
|
const bound = await listen(server, port);
|
|
91
92
|
const url = `http://127.0.0.1:${bound}`;
|
|
92
93
|
log(`${definition.name} GUI: ${url}\nDefinition: ${definition.id} · state: ${stateDirectory}\nPID ${process.pid}. Stop with Ctrl-C or SIGTERM.`);
|