@jini-ai/http-kit 0.3.3 → 0.3.6
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/dist/adapter.d.ts +26 -0
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +36 -0
- package/dist/adapter.js.map +1 -1
- package/dist/agents.d.ts +2 -1
- package/dist/agents.d.ts.map +1 -1
- package/dist/agents.js.map +1 -1
- package/dist/attachments.d.ts +219 -2
- package/dist/attachments.d.ts.map +1 -1
- package/dist/attachments.js +384 -16
- package/dist/attachments.js.map +1 -1
- package/dist/delegated-tools.d.ts +2 -2
- package/dist/delegated-tools.js +2 -2
- package/dist/express/run-stream.d.ts +15 -0
- package/dist/express/run-stream.d.ts.map +1 -0
- package/dist/express/run-stream.js +11 -0
- package/dist/express/run-stream.js.map +1 -0
- package/dist/express-index.d.ts +32 -0
- package/dist/express-index.d.ts.map +1 -0
- package/dist/express-index.js +14 -0
- package/dist/express-index.js.map +1 -0
- package/dist/fastify/adapter.d.ts +31 -0
- package/dist/fastify/adapter.d.ts.map +1 -0
- package/dist/fastify/adapter.js +64 -0
- package/dist/fastify/adapter.js.map +1 -0
- package/dist/fastify/agents.d.ts +13 -0
- package/dist/fastify/agents.d.ts.map +1 -0
- package/dist/fastify/agents.js +7 -0
- package/dist/fastify/agents.js.map +1 -0
- package/dist/fastify/api-security-middleware.d.ts +64 -0
- package/dist/fastify/api-security-middleware.d.ts.map +1 -0
- package/dist/fastify/api-security-middleware.js +139 -0
- package/dist/fastify/api-security-middleware.js.map +1 -0
- package/dist/fastify/compat.d.ts +22 -0
- package/dist/fastify/compat.d.ts.map +1 -0
- package/dist/fastify/compat.js +16 -0
- package/dist/fastify/compat.js.map +1 -0
- package/dist/fastify/daemon-status.d.ts +22 -0
- package/dist/fastify/daemon-status.d.ts.map +1 -0
- package/dist/fastify/daemon-status.js +9 -0
- package/dist/fastify/daemon-status.js.map +1 -0
- package/dist/fastify/host-tools.d.ts +13 -0
- package/dist/fastify/host-tools.d.ts.map +1 -0
- package/dist/fastify/host-tools.js +8 -0
- package/dist/fastify/host-tools.js.map +1 -0
- package/dist/fastify/index.d.ts +36 -0
- package/dist/fastify/index.d.ts.map +1 -0
- package/dist/fastify/index.js +18 -0
- package/dist/fastify/index.js.map +1 -0
- package/dist/fastify/local-daemon-request.d.ts +43 -0
- package/dist/fastify/local-daemon-request.d.ts.map +1 -0
- package/dist/fastify/local-daemon-request.js +155 -0
- package/dist/fastify/local-daemon-request.js.map +1 -0
- package/dist/fastify/origin.d.ts +21 -0
- package/dist/fastify/origin.d.ts.map +1 -0
- package/dist/fastify/origin.js +14 -0
- package/dist/fastify/origin.js.map +1 -0
- package/dist/fastify/request.d.ts +20 -0
- package/dist/fastify/request.d.ts.map +1 -0
- package/dist/fastify/request.js +25 -0
- package/dist/fastify/request.js.map +1 -0
- package/dist/fastify/response.d.ts +20 -0
- package/dist/fastify/response.d.ts.map +1 -0
- package/dist/fastify/response.js +41 -0
- package/dist/fastify/response.js.map +1 -0
- package/dist/fastify/route-registration-guard.d.ts +70 -0
- package/dist/fastify/route-registration-guard.d.ts.map +1 -0
- package/dist/fastify/route-registration-guard.js +69 -0
- package/dist/fastify/route-registration-guard.js.map +1 -0
- package/dist/fastify/run-stream.d.ts +18 -0
- package/dist/fastify/run-stream.d.ts.map +1 -0
- package/dist/fastify/run-stream.js +10 -0
- package/dist/fastify/run-stream.js.map +1 -0
- package/dist/fastify/runs.d.ts +17 -0
- package/dist/fastify/runs.d.ts.map +1 -0
- package/dist/fastify/runs.js +33 -0
- package/dist/fastify/runs.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/run-stream.d.ts +60 -0
- package/dist/run-stream.d.ts.map +1 -0
- package/dist/run-stream.js +108 -0
- package/dist/run-stream.js.map +1 -0
- package/package.json +6 -6
package/dist/attachments.js
CHANGED
|
@@ -30,11 +30,28 @@
|
|
|
30
30
|
* claimed attachment must belong to one batch, so the single `batchDirectory` a host grants the
|
|
31
31
|
* agent read access to cannot be widened by mixing batches.
|
|
32
32
|
*
|
|
33
|
-
* **
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
33
|
+
* **Ownership is opt-in and host-attached, not self-asserted.** `register()`'s optional `ownerId`
|
|
34
|
+
* (and `listPendingForOwner`, the discovery method it enables) is never read from anything a
|
|
35
|
+
* renderer sends — a host wires `AttachmentsHttpDeps.resolveOwnerId` to pull it from a channel IT
|
|
36
|
+
* already trusts (its own session-verified principal header, say), never from `req` unauthenticated.
|
|
37
|
+
* A store with no `resolveOwnerId` wired registers every attachment ownerless, and
|
|
38
|
+
* `listPendingForOwner` never returns an ownerless record for any caller — see that method's own doc
|
|
39
|
+
* for why an absent `ownerId` must never become a wildcard match.
|
|
40
|
+
*
|
|
41
|
+
* **Storage lifetime is daemon-lifetime by default, and opt-in restart-surviving.** With
|
|
42
|
+
* `retainAcrossRestarts` left off (the default, and this pack's only behavior before that option
|
|
43
|
+
* existed), `createDiskAttachmentStore` empties its upload directory on construction: files left
|
|
44
|
+
* behind by an interrupted previous process cannot be authenticated against an in-memory registry
|
|
45
|
+
* that no longer exists, so they are removed rather than adopted. Unclaimed uploads also expire by
|
|
46
|
+
* TTL (`pruneExpired`), and a run's claimed files are deleted by `cleanupRun`.
|
|
47
|
+
*
|
|
48
|
+
* That default is wrong for any host whose process restarts while a person is still using the
|
|
49
|
+
* composer. A file-watching dev server restarting the daemon on an unrelated source edit is not a
|
|
50
|
+
* crash, but the construction wipe cannot tell the two apart, so it destroys uploads the user is
|
|
51
|
+
* about to send — real data loss, not a tidy-up. `retainAcrossRestarts: true` replaces "wipe
|
|
52
|
+
* everything, always" with "adopt exactly what can still be authenticated": see
|
|
53
|
+
* {@link prepareAttachmentStorage} for the whole mechanism and {@link loadPersistedAttachments} for
|
|
54
|
+
* why an adopted record is no less trusted than one this process registered itself.
|
|
38
55
|
*
|
|
39
56
|
* **This pack does not auto-wire itself into a run's lifecycle**, because no generic hook for that
|
|
40
57
|
* exists — the same deliberate choice `@jini-ai/daemon`'s `createRunScopedContextStore` makes. A
|
|
@@ -80,7 +97,7 @@
|
|
|
80
97
|
* correlation-id-bearing generic `INTERNAL_ERROR`, with the real error reaching a host-owned sink —
|
|
81
98
|
* the same `reportInternalError` shape `media.ts`/`delegated-tools.ts` use.
|
|
82
99
|
*/
|
|
83
|
-
import { chmod, lstat, mkdir, open, readdir, realpath, rm, rmdir } from 'node:fs/promises';
|
|
100
|
+
import { chmod, lstat, mkdir, open, readFile, readdir, realpath, rm, rmdir, writeFile } from 'node:fs/promises';
|
|
84
101
|
import { randomUUID } from 'node:crypto';
|
|
85
102
|
import { basename, dirname, extname, resolve } from 'node:path';
|
|
86
103
|
import { createApiError } from '@jini-ai/protocol';
|
|
@@ -134,8 +151,76 @@ function apiErrorForRejection(error) {
|
|
|
134
151
|
* non-traversing path segment.
|
|
135
152
|
*/
|
|
136
153
|
const BATCH_ID_PATTERN = /^[a-zA-Z0-9-]{8,80}$/u;
|
|
137
|
-
/**
|
|
138
|
-
|
|
154
|
+
/**
|
|
155
|
+
* `true` when `body`'s bytes 4-7 spell `ftyp` — the ISO-BMFF box tag AVIF, HEIC, and MP4 all
|
|
156
|
+
* share. This says only "some member of the ISO-BMFF family", never "MP4" or "AVIF" on its own:
|
|
157
|
+
* mirrors `@jini-ai/cms`'s `content-type-sniffer.ts` `isIsoBmffFtyp`, which documents the same
|
|
158
|
+
* fact for the media route's own sniffer. `detectAttachmentKind` never returns `'image'` for this
|
|
159
|
+
* tag alone (see that function's doc) — doing so is exactly the 2026-09-06 regression that made an
|
|
160
|
+
* AVIF render as an unplayable `<video>` when the *media* sniffer briefly had the same bug.
|
|
161
|
+
*/
|
|
162
|
+
function hasIsoBmffFtypTag(body) {
|
|
163
|
+
return body.length >= 8 && new TextDecoder().decode(body.slice(4, 8)) === 'ftyp';
|
|
164
|
+
}
|
|
165
|
+
/** ISO-BMFF brands that identify AVIF: a still image (`avif`) or an image sequence (`avis`). Kept
|
|
166
|
+
* identical to `content-type-sniffer.ts`'s `AVIF_BRANDS` so the two sniffers can never disagree on
|
|
167
|
+
* which brands mean AVIF. */
|
|
168
|
+
const AVIF_FTYP_BRANDS = ['avif', 'avis'];
|
|
169
|
+
const FTYP_MAJOR_BRAND_OFFSET = 8;
|
|
170
|
+
/** Compatible brands follow the major brand (offset 8) and 4-byte minor version (offset 12). */
|
|
171
|
+
const FTYP_COMPATIBLE_BRANDS_OFFSET = 16;
|
|
172
|
+
/** Bound on the compatible-brand list scan — real `ftyp` boxes carry a handful, never dozens. */
|
|
173
|
+
const MAX_SCANNED_COMPATIBLE_BRANDS = 16;
|
|
174
|
+
function hasAvifBrandAt(body, offset) {
|
|
175
|
+
return body.length >= offset + 4
|
|
176
|
+
&& AVIF_FTYP_BRANDS.some((brand) => new TextDecoder().decode(body.slice(offset, offset + 4)) === brand);
|
|
177
|
+
}
|
|
178
|
+
/** The `ftyp` box's declared end offset (big-endian size at bytes 0-3), clamped to the bytes
|
|
179
|
+
* actually present so a truncated or size-inflating file can never push the brand scan past the
|
|
180
|
+
* captured signature window. */
|
|
181
|
+
function ftypBoxEnd(body) {
|
|
182
|
+
if (body.length < FTYP_MAJOR_BRAND_OFFSET)
|
|
183
|
+
return 0;
|
|
184
|
+
const declared = ((body[0] << 24) | (body[1] << 16) | (body[2] << 8) | body[3]) >>> 0;
|
|
185
|
+
return Math.min(declared, body.length);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* `true` when `body` opens with an ISO-BMFF `ftyp` box whose major brand or compatible-brand list
|
|
189
|
+
* names AVIF. This is a line-for-line mirror of `@jini-ai/cms`'s `content-type-sniffer.ts`
|
|
190
|
+
* `isAvif` (no shared dependency exists between `@jini-ai/http-kit` and `@jini-ai/cms` today — see
|
|
191
|
+
* this module's handoff notes on whether extracting one is worth it): the major brand alone is not
|
|
192
|
+
* sufficient, because a great many real AVIF files declare the generic `mif1` (HEIF image) major
|
|
193
|
+
* brand and name `avif` only in the compatible-brand list, so both are checked. HEIC declares
|
|
194
|
+
* neither and is therefore never matched here — deliberate; nothing downstream of this attachment
|
|
195
|
+
* store has confirmed it can render a HEIC as an `<img>`, so labelling one `'image'` would risk the
|
|
196
|
+
* same "sniffed as a type the surface cannot actually display" failure this whole fix addresses.
|
|
197
|
+
*
|
|
198
|
+
* Must run before any generic `ftyp` check: {@link hasIsoBmffFtypTag} alone cannot tell AVIF, HEIC,
|
|
199
|
+
* and MP4 apart, so a brand-blind caller would misclassify every ISO-BMFF file it sees as one type.
|
|
200
|
+
*/
|
|
201
|
+
export function hasAvifSignature(body) {
|
|
202
|
+
if (!hasIsoBmffFtypTag(body))
|
|
203
|
+
return false;
|
|
204
|
+
if (hasAvifBrandAt(body, FTYP_MAJOR_BRAND_OFFSET))
|
|
205
|
+
return true;
|
|
206
|
+
const boxEnd = ftypBoxEnd(body);
|
|
207
|
+
for (let index = 0; index < MAX_SCANNED_COMPATIBLE_BRANDS; index++) {
|
|
208
|
+
const offset = FTYP_COMPATIBLE_BRANDS_OFFSET + index * 4;
|
|
209
|
+
if (offset + 4 > boxEnd)
|
|
210
|
+
return false;
|
|
211
|
+
if (hasAvifBrandAt(body, offset))
|
|
212
|
+
return true;
|
|
213
|
+
}
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Bytes of leading signature `detectAttachmentKind` needs. WEBP's marker ends at byte 12; AVIF
|
|
218
|
+
* needs more — {@link hasAvifSignature}'s compatible-brand scan can read as far as
|
|
219
|
+
* `FTYP_COMPATIBLE_BRANDS_OFFSET + MAX_SCANNED_COMPATIBLE_BRANDS * 4` (a great many real AVIF
|
|
220
|
+
* files declare the generic `mif1` major brand and name `avif` only in the compatible-brand list —
|
|
221
|
+
* see that function's doc), so this is sized to that worst case rather than to the smallest format.
|
|
222
|
+
*/
|
|
223
|
+
const SIGNATURE_BYTES = FTYP_COMPATIBLE_BRANDS_OFFSET + MAX_SCANNED_COMPATIBLE_BRANDS * 4;
|
|
139
224
|
/**
|
|
140
225
|
* `true` when the file on disk is still the same file registration accepted.
|
|
141
226
|
*
|
|
@@ -272,10 +357,14 @@ const IMAGE_SIGNATURE_MATCHERS = [
|
|
|
272
357
|
hasJpegSignature,
|
|
273
358
|
hasGifSignature,
|
|
274
359
|
hasWebpSignature,
|
|
360
|
+
hasAvifSignature,
|
|
275
361
|
];
|
|
276
362
|
/**
|
|
277
363
|
* Infers `'image'` from the leading bytes rather than from a renderer-controlled MIME type or file
|
|
278
|
-
* extension. PNG, JPEG, GIF87a/89a,
|
|
364
|
+
* extension. PNG, JPEG, GIF87a/89a, WEBP, and AVIF (brand-checked ISO-BMFF, see
|
|
365
|
+
* {@link hasAvifSignature}) are recognized; everything else is `'file'` — including a plain MP4 or
|
|
366
|
+
* other non-AVIF ISO-BMFF file, which shares AVIF's `ftyp` tag but is deliberately NOT matched here
|
|
367
|
+
* (see {@link hasIsoBmffFtypTag}'s doc for why a brand-blind `ftyp` check would be wrong).
|
|
279
368
|
*
|
|
280
369
|
* `kind` decides whether a path is later passed to `AgentExecutor.run()`'s `imagePaths`, so letting
|
|
281
370
|
* a renderer assert it would let a renderer choose how the agent runtime parses the bytes.
|
|
@@ -322,6 +411,206 @@ export async function writeBoundedAttachmentBody({ request, filePath, maxBytes,
|
|
|
322
411
|
throw error;
|
|
323
412
|
}
|
|
324
413
|
}
|
|
414
|
+
// ---------------------------------------------------------------------------
|
|
415
|
+
// Restart survival (`retainAcrossRestarts`)
|
|
416
|
+
// ---------------------------------------------------------------------------
|
|
417
|
+
/**
|
|
418
|
+
* Directory, directly under the upload root, holding one small JSON sidecar per registered
|
|
419
|
+
* attachment. This is what makes a restart-surviving store possible at all: the upload path encodes
|
|
420
|
+
* the batch id and nothing else, so a directory scan alone can never recover an attachment's
|
|
421
|
+
* display `name`, its sniffed `kind`, its capability `id`, or — the one that decides whether
|
|
422
|
+
* `listPendingForOwner` can see it again — its `ownerId`. A scan-only "reconstruct from the paths"
|
|
423
|
+
* design therefore brings the *bytes* back and still shows the user an empty list, which is half a
|
|
424
|
+
* fix.
|
|
425
|
+
*
|
|
426
|
+
* The leading `.` is load-bearing: `BATCH_ID_PATTERN` admits no `.`, so `resolveBatchDirectory` can
|
|
427
|
+
* never produce this path and a batch can never collide with (or be made to write into) the sidecar
|
|
428
|
+
* directory. It also sits OUTSIDE every batch directory on purpose — a batch directory is the one
|
|
429
|
+
* directory a host grants the agent read access to (`AttachmentClaim.batchDirectory`), so sidecars
|
|
430
|
+
* kept next to their files would hand a run the `ownerId` and capability ids of every other
|
|
431
|
+
* attachment in the same batch.
|
|
432
|
+
*/
|
|
433
|
+
const SIDECAR_DIRECTORY_NAME = '.records';
|
|
434
|
+
/** Field types a sidecar must carry, checked as data so the validator stays one flat loop. */
|
|
435
|
+
const PERSISTED_FIELD_TYPES = {
|
|
436
|
+
id: 'string',
|
|
437
|
+
filePath: 'string',
|
|
438
|
+
name: 'string',
|
|
439
|
+
kind: 'string',
|
|
440
|
+
size: 'number',
|
|
441
|
+
batchId: 'string',
|
|
442
|
+
dev: 'number',
|
|
443
|
+
ino: 'number',
|
|
444
|
+
createdAt: 'number',
|
|
445
|
+
};
|
|
446
|
+
function hasPersistedFieldTypes(candidate) {
|
|
447
|
+
return Object.entries(PERSISTED_FIELD_TYPES)
|
|
448
|
+
.every(([field, type]) => typeof candidate[field] === type);
|
|
449
|
+
}
|
|
450
|
+
function isPersistedAttachmentShape(raw) {
|
|
451
|
+
if (typeof raw !== 'object' || raw === null)
|
|
452
|
+
return false;
|
|
453
|
+
const candidate = raw;
|
|
454
|
+
if (!hasPersistedFieldTypes(candidate))
|
|
455
|
+
return false;
|
|
456
|
+
if (candidate.ownerId !== undefined && typeof candidate.ownerId !== 'string')
|
|
457
|
+
return false;
|
|
458
|
+
return candidate.kind === 'image' || candidate.kind === 'file';
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Turns one sidecar's parsed JSON back into an `AttachmentRecord`, or `undefined` for anything that
|
|
462
|
+
* is not a well-formed record naming a file inside its own batch directory.
|
|
463
|
+
*
|
|
464
|
+
* `batchDirectory` is re-derived here and `filePath`'s containment is re-checked against it with
|
|
465
|
+
* the same parent-equality test `register` uses — the two checks that make an adopted record no
|
|
466
|
+
* more trusted than one this process registered itself. Pure and exported so both can be exercised
|
|
467
|
+
* against hostile input directly, without staging files on disk.
|
|
468
|
+
*/
|
|
469
|
+
export function parsePersistedAttachment(raw, canonicalUploadDirectory) {
|
|
470
|
+
if (!isPersistedAttachmentShape(raw))
|
|
471
|
+
return undefined;
|
|
472
|
+
if (!BATCH_ID_PATTERN.test(raw.batchId))
|
|
473
|
+
return undefined;
|
|
474
|
+
const batchDirectory = resolve(canonicalUploadDirectory, raw.batchId);
|
|
475
|
+
const filePath = resolve(raw.filePath);
|
|
476
|
+
if (dirname(filePath) !== batchDirectory)
|
|
477
|
+
return undefined;
|
|
478
|
+
return {
|
|
479
|
+
id: raw.id,
|
|
480
|
+
filePath,
|
|
481
|
+
name: raw.name,
|
|
482
|
+
kind: raw.kind,
|
|
483
|
+
size: raw.size,
|
|
484
|
+
batchId: raw.batchId,
|
|
485
|
+
batchDirectory,
|
|
486
|
+
dev: raw.dev,
|
|
487
|
+
ino: raw.ino,
|
|
488
|
+
createdAt: raw.createdAt,
|
|
489
|
+
...(raw.ownerId === undefined ? {} : { ownerId: raw.ownerId }),
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Sidecar filename for a record id. Reduces the id to the same `[a-zA-Z0-9-]` allowlist
|
|
494
|
+
* `BATCH_ID_PATTERN` uses before appending the extension, so no id — however this store's own id
|
|
495
|
+
* format later changes — can put a `/`, a `..`, or a second extension into the path. Ids are
|
|
496
|
+
* `attachment:<uuid>`, so the reduction stays injective in practice: the UUID is what makes it
|
|
497
|
+
* unique and the UUID survives unchanged.
|
|
498
|
+
*/
|
|
499
|
+
export function attachmentSidecarFileName(id) {
|
|
500
|
+
return `${id.replaceAll(/[^a-zA-Z0-9-]/gu, '_')}.json`;
|
|
501
|
+
}
|
|
502
|
+
async function readPersistedAttachment(sidecarPath, canonicalUploadDirectory) {
|
|
503
|
+
try {
|
|
504
|
+
const raw = JSON.parse(await readFile(sidecarPath, 'utf8'));
|
|
505
|
+
return parsePersistedAttachment(raw, canonicalUploadDirectory);
|
|
506
|
+
}
|
|
507
|
+
catch {
|
|
508
|
+
// Unreadable, truncated by a kill mid-write, or not JSON at all. Indistinguishable from a
|
|
509
|
+
// sidecar that never described a real attachment, and handled identically: not adopted.
|
|
510
|
+
return undefined;
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* `true` when the file this record describes is still byte-for-byte the file registration accepted.
|
|
515
|
+
*
|
|
516
|
+
* Deliberately `verifyClaimedAttachments` rather than a looser existence check: adoption must apply
|
|
517
|
+
* the SAME `dev`/`ino`/`size`/`realpath` gate `claim()` applies, or a restart would become the one
|
|
518
|
+
* moment at which a file swapped underneath the store gets handed to an agent anyway.
|
|
519
|
+
*/
|
|
520
|
+
async function isAdoptableAttachment(record) {
|
|
521
|
+
try {
|
|
522
|
+
await verifyClaimedAttachments([record]);
|
|
523
|
+
return true;
|
|
524
|
+
}
|
|
525
|
+
catch {
|
|
526
|
+
return false;
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* Rebuilds the record map from the sidecar directory, adopting only records that are (a) well
|
|
531
|
+
* formed and contained, (b) still within the retention window, and (c) still backed by the exact
|
|
532
|
+
* file registration accepted. Anything failing any of those is deleted — sidecar first, then the
|
|
533
|
+
* file it named, and the file ONLY when containment passed, so an unparseable sidecar can never
|
|
534
|
+
* make this an arbitrary-file-delete primitive for whatever the daemon can unlink.
|
|
535
|
+
*
|
|
536
|
+
* **The retention consequence, stated rather than assumed harmless.** Because `claimedRunId` is not
|
|
537
|
+
* persisted (see {@link PersistedAttachmentRecord}), a file claimed by a run that died with the
|
|
538
|
+
* process is adopted as unclaimed instead of being wiped, so it now occupies disk and quota for up
|
|
539
|
+
* to `retentionMs` rather than until the next start. Bounded by the same `maxStoredAttachments` /
|
|
540
|
+
* `maxStoredBytes` quotas as any live upload, and cleared by the `pruneExpired` every upload
|
|
541
|
+
* already runs — but it is a real change in when that disk comes back.
|
|
542
|
+
*
|
|
543
|
+
* @complexity O(n) in sidecars present, each costing one read and one `lstat`/`realpath` pair.
|
|
544
|
+
*/
|
|
545
|
+
export async function loadPersistedAttachments({ canonicalUploadDirectory, retentionMs, now = Date.now(), }) {
|
|
546
|
+
const sidecarDirectory = resolve(canonicalUploadDirectory, SIDECAR_DIRECTORY_NAME);
|
|
547
|
+
await mkdir(sidecarDirectory, { recursive: true, mode: 0o700 });
|
|
548
|
+
const adopted = new Map();
|
|
549
|
+
for (const entry of await readdir(sidecarDirectory)) {
|
|
550
|
+
const sidecarPath = resolve(sidecarDirectory, entry);
|
|
551
|
+
const record = await readPersistedAttachment(sidecarPath, canonicalUploadDirectory);
|
|
552
|
+
if (record && now - record.createdAt < retentionMs && await isAdoptableAttachment(record)) {
|
|
553
|
+
adopted.set(record.id, record);
|
|
554
|
+
continue;
|
|
555
|
+
}
|
|
556
|
+
await rm(sidecarPath, { force: true });
|
|
557
|
+
if (record)
|
|
558
|
+
await rm(record.filePath, { force: true });
|
|
559
|
+
}
|
|
560
|
+
return adopted;
|
|
561
|
+
}
|
|
562
|
+
/** Deletes everything in one batch directory that no adopted record names, then tidies the
|
|
563
|
+
* directory away if that emptied it. A root entry that is not a directory at all is removed
|
|
564
|
+
* outright — the store never creates one, so it can only be debris. */
|
|
565
|
+
async function removeUnadoptedBatch(batchDirectory, keep) {
|
|
566
|
+
const entries = await readdir(batchDirectory).catch(() => undefined);
|
|
567
|
+
if (entries === undefined) {
|
|
568
|
+
await rm(batchDirectory, { force: true });
|
|
569
|
+
return;
|
|
570
|
+
}
|
|
571
|
+
for (const entry of entries) {
|
|
572
|
+
const filePath = resolve(batchDirectory, entry);
|
|
573
|
+
if (!keep.has(filePath))
|
|
574
|
+
await rm(filePath, { recursive: true, force: true });
|
|
575
|
+
}
|
|
576
|
+
await rmdir(batchDirectory).catch(() => undefined);
|
|
577
|
+
}
|
|
578
|
+
/**
|
|
579
|
+
* Removes every upload the sidecar pass did not adopt. Without this, a file whose sidecar was lost
|
|
580
|
+
* (or was never written, because it predates this option) would survive forever with nothing
|
|
581
|
+
* tracking it — trading the wipe's data loss for unbounded disk growth, which is not a trade worth
|
|
582
|
+
* making. This is what keeps "never wipe on construction" bounded.
|
|
583
|
+
*/
|
|
584
|
+
export async function removeUnadoptedUploads(canonicalUploadDirectory, adopted) {
|
|
585
|
+
const keep = new Set([...adopted.values()].map((record) => record.filePath));
|
|
586
|
+
for (const entry of await readdir(canonicalUploadDirectory)) {
|
|
587
|
+
if (entry === SIDECAR_DIRECTORY_NAME)
|
|
588
|
+
continue;
|
|
589
|
+
await removeUnadoptedBatch(resolve(canonicalUploadDirectory, entry), keep);
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
/**
|
|
593
|
+
* Decides what a newly-constructed store starts holding: nothing (the default — empty the directory
|
|
594
|
+
* outright, this pack's behavior before `retainAcrossRestarts` existed), or the authenticated
|
|
595
|
+
* survivors of the previous process.
|
|
596
|
+
*
|
|
597
|
+
* Exported so the whole restart decision can be exercised without standing a store up around it.
|
|
598
|
+
*/
|
|
599
|
+
export async function prepareAttachmentStorage({ canonicalUploadDirectory, retainAcrossRestarts, retentionMs, now, }) {
|
|
600
|
+
if (!retainAcrossRestarts) {
|
|
601
|
+
for (const entry of await readdir(canonicalUploadDirectory)) {
|
|
602
|
+
await rm(resolve(canonicalUploadDirectory, entry), { recursive: true, force: true });
|
|
603
|
+
}
|
|
604
|
+
return new Map();
|
|
605
|
+
}
|
|
606
|
+
const adopted = await loadPersistedAttachments({
|
|
607
|
+
canonicalUploadDirectory,
|
|
608
|
+
retentionMs,
|
|
609
|
+
...(now === undefined ? {} : { now }),
|
|
610
|
+
});
|
|
611
|
+
await removeUnadoptedUploads(canonicalUploadDirectory, adopted);
|
|
612
|
+
return adopted;
|
|
613
|
+
}
|
|
325
614
|
/**
|
|
326
615
|
* The disk-backed `AttachmentStore` this package ships. Every default matches what a chat composer
|
|
327
616
|
* needs out of the box; a host that wants different quotas passes them rather than reimplementing
|
|
@@ -330,16 +619,54 @@ export async function writeBoundedAttachmentBody({ request, filePath, maxBytes,
|
|
|
330
619
|
* @complexity `register`/`claim` are O(n) in the number of tracked records (a small bounded number
|
|
331
620
|
* — `maxStoredAttachments`), which is what keeps the quota decision synchronous; see `register`.
|
|
332
621
|
*/
|
|
333
|
-
export async function createDiskAttachmentStore({ uploadDirectory, maxAttachments = 10, maxBatchBytes = 50 * 1024 * 1024, maxStoredAttachments = 100, maxStoredBytes = 200 * 1024 * 1024, retentionMs = 60 * 60 * 1_000, }) {
|
|
622
|
+
export async function createDiskAttachmentStore({ uploadDirectory, maxAttachments = 10, maxBatchBytes = 50 * 1024 * 1024, maxStoredAttachments = 100, maxStoredBytes = 200 * 1024 * 1024, retentionMs = 60 * 60 * 1_000, retainAcrossRestarts = false, }) {
|
|
334
623
|
await mkdir(uploadDirectory, { recursive: true, mode: 0o700 });
|
|
335
624
|
await chmod(uploadDirectory, 0o700);
|
|
336
625
|
const canonicalUploadDirectory = await realpath(uploadDirectory);
|
|
337
|
-
//
|
|
338
|
-
//
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
626
|
+
// Either empties the directory (the default — a file left by an interrupted previous process has
|
|
627
|
+
// no record to authenticate it against) or adopts the previous process's authenticated survivors.
|
|
628
|
+
// See `prepareAttachmentStorage`.
|
|
629
|
+
const records = await prepareAttachmentStorage({
|
|
630
|
+
canonicalUploadDirectory,
|
|
631
|
+
retainAcrossRestarts,
|
|
632
|
+
retentionMs,
|
|
633
|
+
});
|
|
634
|
+
const sidecarDirectory = resolve(canonicalUploadDirectory, SIDECAR_DIRECTORY_NAME);
|
|
635
|
+
const sidecarPathFor = (record) => resolve(sidecarDirectory, attachmentSidecarFileName(record.id));
|
|
636
|
+
/**
|
|
637
|
+
* Writes one record's sidecar, or does nothing at all when this store was not asked to survive
|
|
638
|
+
* restarts. A failure rolls the record back out of the map before propagating: a registration
|
|
639
|
+
* whose sidecar could not be written would otherwise be silently non-surviving, which is the
|
|
640
|
+
* exact failure mode this whole option exists to remove. `register`'s own `catch` deletes the
|
|
641
|
+
* file, so the caller sees a failed upload rather than one that quietly evaporates later.
|
|
642
|
+
*/
|
|
643
|
+
const persistRecord = async (record) => {
|
|
644
|
+
if (!retainAcrossRestarts)
|
|
645
|
+
return;
|
|
646
|
+
const persisted = {
|
|
647
|
+
id: record.id,
|
|
648
|
+
filePath: record.filePath,
|
|
649
|
+
name: record.name,
|
|
650
|
+
kind: record.kind,
|
|
651
|
+
size: record.size,
|
|
652
|
+
batchId: record.batchId,
|
|
653
|
+
dev: record.dev,
|
|
654
|
+
ino: record.ino,
|
|
655
|
+
createdAt: record.createdAt,
|
|
656
|
+
...(record.ownerId === undefined ? {} : { ownerId: record.ownerId }),
|
|
657
|
+
};
|
|
658
|
+
try {
|
|
659
|
+
await writeFile(sidecarPathFor(record), JSON.stringify(persisted), { mode: 0o600 });
|
|
660
|
+
}
|
|
661
|
+
catch (error) {
|
|
662
|
+
records.delete(record.id);
|
|
663
|
+
throw error;
|
|
664
|
+
}
|
|
665
|
+
};
|
|
666
|
+
const forgetRecord = async (record) => {
|
|
667
|
+
if (retainAcrossRestarts)
|
|
668
|
+
await rm(sidecarPathFor(record), { force: true });
|
|
669
|
+
};
|
|
343
670
|
const resolveBatchDirectory = (batchId) => {
|
|
344
671
|
if (!BATCH_ID_PATTERN.test(batchId)) {
|
|
345
672
|
throw new AttachmentRejectedError('invalid-batch', 'Invalid attachment batch');
|
|
@@ -363,6 +690,7 @@ export async function createDiskAttachmentStore({ uploadDirectory, maxAttachment
|
|
|
363
690
|
};
|
|
364
691
|
const deleteRecord = async (record) => {
|
|
365
692
|
records.delete(record.id);
|
|
693
|
+
await forgetRecord(record);
|
|
366
694
|
await rm(record.filePath, { force: true });
|
|
367
695
|
await removeEmptyBatch(record.batchDirectory);
|
|
368
696
|
};
|
|
@@ -437,8 +765,12 @@ export async function createDiskAttachmentStore({ uploadDirectory, maxAttachment
|
|
|
437
765
|
dev: info.dev,
|
|
438
766
|
ino: info.ino,
|
|
439
767
|
createdAt: Date.now(),
|
|
768
|
+
...(input.ownerId === undefined ? {} : { ownerId: input.ownerId }),
|
|
440
769
|
};
|
|
441
770
|
records.set(id, record);
|
|
771
|
+
// The first `await` after the synchronous quota window closes, so it cannot reopen the race
|
|
772
|
+
// the comment above guards. Rolls `records` back itself on failure — see `persistRecord`.
|
|
773
|
+
await persistRecord(record);
|
|
442
774
|
return { path: id, name: record.name, kind: record.kind, size: record.size };
|
|
443
775
|
}
|
|
444
776
|
catch (error) {
|
|
@@ -478,6 +810,40 @@ export async function createDiskAttachmentStore({ uploadDirectory, maxAttachment
|
|
|
478
810
|
throw error;
|
|
479
811
|
}
|
|
480
812
|
},
|
|
813
|
+
async resolveForRun(ref, runId) {
|
|
814
|
+
// Synchronous check-then-reserve, same reasoning as `reserveAttachmentRecords`: nothing may
|
|
815
|
+
// `await` between reading `claimedRunId` and writing it, or a concurrent call could observe
|
|
816
|
+
// the same unclaimed record and both believe they reserved it.
|
|
817
|
+
const record = records.get(ref) ?? [...records.values()].find((candidate) => candidate.filePath === ref);
|
|
818
|
+
if (!record)
|
|
819
|
+
return undefined;
|
|
820
|
+
if (record.claimedRunId !== undefined && record.claimedRunId !== runId) {
|
|
821
|
+
throw new AttachmentRejectedError('attachment-unknown-or-claimed', 'Attachment is unknown or already claimed');
|
|
822
|
+
}
|
|
823
|
+
const reservedNow = record.claimedRunId === undefined;
|
|
824
|
+
if (reservedNow)
|
|
825
|
+
record.claimedRunId = runId;
|
|
826
|
+
try {
|
|
827
|
+
await verifyClaimedAttachments([record]);
|
|
828
|
+
}
|
|
829
|
+
catch (error) {
|
|
830
|
+
// Mirrors `claim()`'s own rollback: a lookup that fails integrity must not leave a phantom
|
|
831
|
+
// reservation behind for a record that turned out to be unsafe to hand back.
|
|
832
|
+
if (reservedNow)
|
|
833
|
+
delete record.claimedRunId;
|
|
834
|
+
throw error;
|
|
835
|
+
}
|
|
836
|
+
return { path: record.filePath, name: record.name, kind: record.kind, size: record.size };
|
|
837
|
+
},
|
|
838
|
+
async listPendingForOwner(ownerId) {
|
|
839
|
+
return [...records.values()]
|
|
840
|
+
// `record.ownerId !== undefined` first, short-circuiting before the comparison: this is
|
|
841
|
+
// what makes an ownerless record excluded rather than accidentally matched by a falsy-ish
|
|
842
|
+
// `ownerId` argument — see this method's own doc on why that must never be a wildcard.
|
|
843
|
+
.filter((record) => record.claimedRunId === undefined && record.ownerId !== undefined && record.ownerId === ownerId)
|
|
844
|
+
.sort((a, b) => a.createdAt - b.createdAt)
|
|
845
|
+
.map((record) => ({ ref: record.id, name: record.name, kind: record.kind, size: record.size, createdAt: record.createdAt }));
|
|
846
|
+
},
|
|
481
847
|
async deleteUnclaimed(batchId, paths) {
|
|
482
848
|
const batchDirectory = resolveBatchDirectory(batchId);
|
|
483
849
|
for (const attachmentId of new Set(paths)) {
|
|
@@ -576,12 +942,14 @@ export async function handleAttachmentUpload(req, res, deps, state) {
|
|
|
576
942
|
sendApiError(res, 400, createApiError('BAD_REQUEST', 'Attachment is empty'));
|
|
577
943
|
return;
|
|
578
944
|
}
|
|
945
|
+
const ownerId = deps.resolveOwnerId?.(req);
|
|
579
946
|
const attachment = await deps.store.register({
|
|
580
947
|
batchId,
|
|
581
948
|
path,
|
|
582
949
|
name,
|
|
583
950
|
kind: detectAttachmentKind(upload.signature),
|
|
584
951
|
size: upload.size,
|
|
952
|
+
...(ownerId === undefined ? {} : { ownerId }),
|
|
585
953
|
});
|
|
586
954
|
sendJson(res, 201, { attachment });
|
|
587
955
|
}
|
package/dist/attachments.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../src/attachments.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../src/attachments.ts"],"names":[],"mappings":"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"}
|
|
@@ -149,8 +149,8 @@ export interface ReadOnlyToolConstraintDeps {
|
|
|
149
149
|
* dispatch a tool id the caller never named (a retry, a recovery loop that calls a different tool
|
|
150
150
|
* as a remedy, ...). Every such decorator's own `inner.execute` call still has to come through here
|
|
151
151
|
* to reach a handler, which is what makes this a gate on the CLASS of defect (an unnamed nested
|
|
152
|
-
* dispatch) rather than on one instance of it — see `read-only-tool-constraint.ts` in
|
|
153
|
-
* `apps/website`, the consumer this was ported from, for the composition this mirrors.
|
|
152
|
+
* dispatch) rather than on one instance of it — see `read-only-tool-constraint.ts` in the consuming
|
|
153
|
+
* product's own `apps/website`, the consumer this was ported from, for the composition this mirrors.
|
|
154
154
|
*
|
|
155
155
|
* `delegatedToolExecuteRoute`'s own `handle` additionally composes this around whatever
|
|
156
156
|
* `ToolExecutor` a host supplies, whenever a call attenuates its principal. That outer composition
|
package/dist/delegated-tools.js
CHANGED
|
@@ -109,8 +109,8 @@ export function refuseNonReadOnlyDispatch(options) {
|
|
|
109
109
|
* dispatch a tool id the caller never named (a retry, a recovery loop that calls a different tool
|
|
110
110
|
* as a remedy, ...). Every such decorator's own `inner.execute` call still has to come through here
|
|
111
111
|
* to reach a handler, which is what makes this a gate on the CLASS of defect (an unnamed nested
|
|
112
|
-
* dispatch) rather than on one instance of it — see `read-only-tool-constraint.ts` in
|
|
113
|
-
* `apps/website`, the consumer this was ported from, for the composition this mirrors.
|
|
112
|
+
* dispatch) rather than on one instance of it — see `read-only-tool-constraint.ts` in the consuming
|
|
113
|
+
* product's own `apps/website`, the consumer this was ported from, for the composition this mirrors.
|
|
114
114
|
*
|
|
115
115
|
* `delegatedToolExecuteRoute`'s own `handle` additionally composes this around whatever
|
|
116
116
|
* `ToolExecutor` a host supplies, whenever a call attenuates its principal. That outer composition
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module express/run-stream
|
|
3
|
+
*
|
|
4
|
+
* Express-specific mounting glue for the shared AG-UI SSE run-stream handler (`../run-stream.js`).
|
|
5
|
+
* Express's `Request`/`Response` already *are* Node's raw `http.IncomingMessage`/
|
|
6
|
+
* `http.ServerResponse` (Express's `Response` extends `http.ServerResponse` directly), so this
|
|
7
|
+
* file's only job is resolving `req.params.runId` and handing the request/response straight
|
|
8
|
+
* through — a few lines, not a reimplementation, per the design decision that motivated building
|
|
9
|
+
* the SSE primitive once instead of duplicating it per transport.
|
|
10
|
+
*/
|
|
11
|
+
import type { Express } from 'express';
|
|
12
|
+
import { type RunStreamDeps } from '../run-stream.js';
|
|
13
|
+
/** Mounts the AG-UI SSE run-stream route on `app`. A pack's `http(app, services)` calls this directly. */
|
|
14
|
+
export declare function registerRunStreamRoute(app: Express, deps: RunStreamDeps): void;
|
|
15
|
+
//# sourceMappingURL=run-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-stream.d.ts","sourceRoot":"","sources":["../../src/express/run-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAiD,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAErG,0GAA0G;AAC1G,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAO9E"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { handleRunStreamRequest, RUN_STREAM_ROUTE_PATH } from '../run-stream.js';
|
|
2
|
+
/** Mounts the AG-UI SSE run-stream route on `app`. A pack's `http(app, services)` calls this directly. */
|
|
3
|
+
export function registerRunStreamRoute(app, deps) {
|
|
4
|
+
app.get(RUN_STREAM_ROUTE_PATH, async (req, res) => {
|
|
5
|
+
// `:runId` is a required path segment of RUN_STREAM_ROUTE_PATH — this handler is only ever
|
|
6
|
+
// reached via a URL that already matched it, so the param is always present at runtime even
|
|
7
|
+
// though @types/express types every param as possibly `undefined` in general.
|
|
8
|
+
await handleRunStreamRequest(req, res, req.params.runId, deps);
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=run-stream.js.map
|