@aexhq/sdk 0.38.1 → 0.40.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/README.md +23 -17
- package/dist/_contracts/api-key.d.ts +49 -0
- package/dist/_contracts/api-key.js +87 -0
- package/dist/_contracts/bundle-manifest.d.ts +86 -0
- package/dist/_contracts/bundle-manifest.js +157 -0
- package/dist/_contracts/error-codes.d.ts +26 -0
- package/dist/_contracts/error-codes.js +79 -0
- package/dist/_contracts/error-factory.d.ts +32 -0
- package/dist/_contracts/error-factory.js +142 -0
- package/dist/_contracts/event-envelope.d.ts +33 -10
- package/dist/_contracts/event-envelope.js +46 -10
- package/dist/_contracts/event-view.d.ts +123 -0
- package/dist/_contracts/event-view.js +120 -0
- package/dist/_contracts/http.js +12 -3
- package/dist/_contracts/index.d.ts +8 -4
- package/dist/_contracts/index.js +11 -7
- package/dist/_contracts/models.d.ts +15 -0
- package/dist/_contracts/models.js +33 -0
- package/dist/_contracts/operations.d.ts +70 -2
- package/dist/_contracts/operations.js +143 -7
- package/dist/_contracts/run-config.d.ts +35 -10
- package/dist/_contracts/run-config.js +17 -5
- package/dist/_contracts/run-record.d.ts +3 -2
- package/dist/_contracts/runtime-types.d.ts +148 -36
- package/dist/_contracts/runtime-types.js +33 -1
- package/dist/_contracts/sdk-errors.d.ts +61 -2
- package/dist/_contracts/sdk-errors.js +83 -3
- package/dist/_contracts/sdk-secrets.js +31 -6
- package/dist/_contracts/stable.d.ts +14 -0
- package/dist/_contracts/stable.js +14 -0
- package/dist/_contracts/status.d.ts +28 -1
- package/dist/_contracts/status.js +48 -3
- package/dist/_contracts/submission.d.ts +157 -14
- package/dist/_contracts/submission.js +319 -55
- package/dist/_contracts/suggest.d.ts +15 -0
- package/dist/_contracts/suggest.js +54 -0
- package/dist/asset-upload.d.ts +27 -1
- package/dist/asset-upload.js +219 -4
- package/dist/asset-upload.js.map +1 -1
- package/dist/bundle.d.ts +23 -14
- package/dist/bundle.js +39 -20
- package/dist/bundle.js.map +1 -1
- package/dist/canonical-zip.d.ts +68 -0
- package/dist/canonical-zip.js +307 -0
- package/dist/canonical-zip.js.map +1 -0
- package/dist/cli.mjs +1927 -326
- package/dist/cli.mjs.sha256 +1 -1
- package/dist/client.d.ts +273 -70
- package/dist/client.js +885 -335
- package/dist/client.js.map +1 -1
- package/dist/fetch-archive.js +14 -14
- package/dist/fetch-archive.js.map +1 -1
- package/dist/file.d.ts +33 -6
- package/dist/file.js +120 -54
- package/dist/file.js.map +1 -1
- package/dist/index.d.ts +23 -14
- package/dist/index.js +31 -14
- package/dist/index.js.map +1 -1
- package/dist/node-fs.d.ts +26 -9
- package/dist/node-fs.js +13 -38
- package/dist/node-fs.js.map +1 -1
- package/dist/node-walk.d.ts +69 -0
- package/dist/node-walk.js +146 -0
- package/dist/node-walk.js.map +1 -0
- package/dist/retry.d.ts +9 -13
- package/dist/retry.js +18 -17
- package/dist/retry.js.map +1 -1
- package/dist/skill.d.ts +151 -0
- package/dist/skill.js +298 -0
- package/dist/skill.js.map +1 -0
- package/dist/tool.d.ts +14 -2
- package/dist/tool.js +33 -7
- package/dist/tool.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/authentication.md +29 -5
- package/docs/billing.md +6 -0
- package/docs/concepts/agent-tools.md +11 -0
- package/docs/concepts/composition.md +3 -3
- package/docs/defaults.md +1 -0
- package/docs/errors.md +64 -4
- package/docs/events.md +84 -49
- package/docs/limits-and-quotas.md +24 -0
- package/docs/mcp.md +3 -2
- package/docs/networking.md +7 -1
- package/docs/outputs.md +36 -7
- package/docs/provider-runtime-capabilities.md +1 -1
- package/docs/quickstart.md +17 -7
- package/docs/run-config.md +3 -3
- package/docs/secrets.md +14 -0
- package/docs/skills.md +74 -44
- package/docs/vision-skills.md +3 -3
- package/examples/feature-tour.ts +4 -6
- package/examples/spike-settle-latency.ts +125 -0
- package/package.json +4 -3
- package/dist/_contracts/event-guards.d.ts +0 -67
- package/dist/_contracts/event-guards.js +0 -36
- package/dist/skill-tool.d.ts +0 -102
- package/dist/skill-tool.js +0 -190
- package/dist/skill-tool.js.map +0 -1
package/dist/asset-upload.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Asset materialization for the SDK run / session path.
|
|
3
3
|
*
|
|
4
|
-
* Every inline
|
|
4
|
+
* Every inline `Skill` / `Tool` / `AgentsMd` / `File` draft is materialized
|
|
5
5
|
* to the hosted API's content-addressable asset store before the session
|
|
6
6
|
* starts, so the wire submission carries only storage-neutral refs.
|
|
7
7
|
*
|
|
@@ -97,15 +97,230 @@ async function computeSha256Hex(bytes) {
|
|
|
97
97
|
throw new Error("uploadAsset: globalThis.crypto.subtle is not available; " +
|
|
98
98
|
"Bun, Node 18+, or a Web-Crypto-capable runtime is required");
|
|
99
99
|
}
|
|
100
|
-
|
|
101
|
-
copy.
|
|
102
|
-
const digest = await subtle.digest("SHA-256",
|
|
100
|
+
// Pass the view directly — Web Crypto accepts an ArrayBufferView and digests
|
|
101
|
+
// exactly its bytes (respecting byteOffset/length). No redundant full-buffer copy.
|
|
102
|
+
const digest = await subtle.digest("SHA-256", bytes);
|
|
103
103
|
return bufferToHex(digest);
|
|
104
104
|
}
|
|
105
105
|
function assetIdFromContentHash(contentHash) {
|
|
106
106
|
const hex = contentHash.startsWith("sha256:") ? contentHash.slice("sha256:".length) : contentHash;
|
|
107
107
|
return `asset_${hex}`;
|
|
108
108
|
}
|
|
109
|
+
// ===========================================================================
|
|
110
|
+
// Multipart streaming upload (large assets — the "kill the in-memory ceiling"
|
|
111
|
+
// path). Two-pass over a re-openable, DETERMINISTIC canonical-zip byte stream:
|
|
112
|
+
// pass 1 — stream → running SHA-256 → presign BY HASH (dedup still short-
|
|
113
|
+
// circuits `exists:true` with zero bytes uploaded);
|
|
114
|
+
// pass 2 — re-stream → chunk into parts → S3 multipart UploadPart (bounded
|
|
115
|
+
// concurrency + per-part retry, only the failed part re-sent) →
|
|
116
|
+
// CompleteMultipartUpload (server validates the full-object SHA-256).
|
|
117
|
+
// A failure after presign aborts the multipart upload so no orphaned parts bill.
|
|
118
|
+
// ===========================================================================
|
|
119
|
+
/** Default multipart part size — 16 MiB covers the 100 GiB cap within S3's 10 000-part limit. */
|
|
120
|
+
export const DEFAULT_MULTIPART_PART_SIZE = 16 * 1024 * 1024;
|
|
121
|
+
/** Default in-flight part concurrency. */
|
|
122
|
+
export const DEFAULT_MULTIPART_CONCURRENCY = 4;
|
|
123
|
+
/** Stream a large asset to the content store via the two-pass multipart flow. */
|
|
124
|
+
export async function uploadAssetMultipart(args) {
|
|
125
|
+
const partSize = args.partSize ?? DEFAULT_MULTIPART_PART_SIZE;
|
|
126
|
+
const concurrency = Math.max(1, args.partConcurrency ?? DEFAULT_MULTIPART_CONCURRENCY);
|
|
127
|
+
const doFetch = args.fetch ?? globalThis.fetch;
|
|
128
|
+
// ---- Pass 1: stream → running SHA-256 + byte count ----
|
|
129
|
+
const { hashHex, sizeBytes } = await hashAndSizeViaDrive(args.drive);
|
|
130
|
+
const contentHashHeader = `sha256:${hashHex}`;
|
|
131
|
+
// ---- Presign (multipart) — dedup short-circuits before any bytes move ----
|
|
132
|
+
const presign = await args.http.request("/assets/presign", {
|
|
133
|
+
method: "POST",
|
|
134
|
+
headers: { "content-type": "application/json" },
|
|
135
|
+
body: JSON.stringify({ hash: contentHashHeader, sizeBytes, multipart: true, partSize })
|
|
136
|
+
});
|
|
137
|
+
if (presign.exists) {
|
|
138
|
+
const contentHash = presign.contentHash ?? contentHashHeader;
|
|
139
|
+
return {
|
|
140
|
+
assetId: presign.assetId ?? assetIdFromContentHash(contentHash),
|
|
141
|
+
contentHash,
|
|
142
|
+
sizeBytes: presign.sizeBytes ?? sizeBytes,
|
|
143
|
+
exists: true
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
const mp = presign.multipart;
|
|
147
|
+
if (!mp || !mp.uploadId || !mp.key || !Array.isArray(mp.partUrls)) {
|
|
148
|
+
throw new Error("uploadAssetMultipart: presign returned no multipart plan and exists:false");
|
|
149
|
+
}
|
|
150
|
+
// ---- Pass 2: re-stream → parts → UploadPart (bounded concurrency + retry) ----
|
|
151
|
+
const urlByPart = new Map();
|
|
152
|
+
for (const p of mp.partUrls)
|
|
153
|
+
urlByPart.set(p.partNumber, p.url);
|
|
154
|
+
const parts = [];
|
|
155
|
+
const inflight = new Set();
|
|
156
|
+
let failed;
|
|
157
|
+
const refreshPartUrl = async (partNumber) => {
|
|
158
|
+
const res = await args.http.request("/assets/mpu/presign-parts", {
|
|
159
|
+
method: "POST",
|
|
160
|
+
headers: { "content-type": "application/json" },
|
|
161
|
+
body: JSON.stringify({ uploadId: mp.uploadId, key: mp.key, partNumbers: [partNumber] })
|
|
162
|
+
});
|
|
163
|
+
const fresh = res.partUrls?.find((p) => p.partNumber === partNumber)?.url;
|
|
164
|
+
if (!fresh)
|
|
165
|
+
throw new Error(`uploadAssetMultipart: could not refresh URL for part ${partNumber}`);
|
|
166
|
+
urlByPart.set(partNumber, fresh);
|
|
167
|
+
return fresh;
|
|
168
|
+
};
|
|
169
|
+
const uploadOnePart = async (partNumber, bytes) => {
|
|
170
|
+
let url = urlByPart.get(partNumber);
|
|
171
|
+
if (!url)
|
|
172
|
+
url = await refreshPartUrl(partNumber);
|
|
173
|
+
const etag = await putPartWithRetry(doFetch, url, bytes, args.contentType, () => refreshPartUrl(partNumber));
|
|
174
|
+
parts.push({ partNumber, etag });
|
|
175
|
+
};
|
|
176
|
+
const submitPart = async (partNumber, bytes) => {
|
|
177
|
+
while (inflight.size >= concurrency)
|
|
178
|
+
await Promise.race(inflight);
|
|
179
|
+
if (failed !== undefined)
|
|
180
|
+
throw failed;
|
|
181
|
+
const tracked = uploadOnePart(partNumber, bytes)
|
|
182
|
+
.catch((err) => {
|
|
183
|
+
failed ??= err;
|
|
184
|
+
})
|
|
185
|
+
.finally(() => {
|
|
186
|
+
inflight.delete(tracked);
|
|
187
|
+
});
|
|
188
|
+
inflight.add(tracked);
|
|
189
|
+
};
|
|
190
|
+
try {
|
|
191
|
+
let partNumber = 0;
|
|
192
|
+
const chunker = makePartChunker(partSize, async (bytes) => {
|
|
193
|
+
partNumber += 1;
|
|
194
|
+
await submitPart(partNumber, bytes);
|
|
195
|
+
});
|
|
196
|
+
await args.drive(async (chunk) => {
|
|
197
|
+
await chunker.push(chunk);
|
|
198
|
+
if (failed !== undefined)
|
|
199
|
+
throw failed;
|
|
200
|
+
});
|
|
201
|
+
await chunker.flush();
|
|
202
|
+
await Promise.all(inflight);
|
|
203
|
+
if (failed !== undefined)
|
|
204
|
+
throw failed;
|
|
205
|
+
if (partNumber === 0) {
|
|
206
|
+
// Zero-length streams cannot happen for a real zip (EOCD is always emitted),
|
|
207
|
+
// but guard so a bug fails loud rather than completing an empty MPU.
|
|
208
|
+
throw new Error("uploadAssetMultipart: no parts produced from the zip stream");
|
|
209
|
+
}
|
|
210
|
+
parts.sort((a, b) => a.partNumber - b.partNumber);
|
|
211
|
+
const fin = await args.http.request("/assets/finalize", {
|
|
212
|
+
method: "POST",
|
|
213
|
+
headers: { "content-type": "application/json" },
|
|
214
|
+
body: JSON.stringify({ hash: contentHashHeader, sizeBytes, uploadId: mp.uploadId, key: mp.key, parts })
|
|
215
|
+
});
|
|
216
|
+
const contentHash = fin.contentHash ?? contentHashHeader;
|
|
217
|
+
return {
|
|
218
|
+
assetId: fin.assetId ?? assetIdFromContentHash(contentHash),
|
|
219
|
+
contentHash,
|
|
220
|
+
sizeBytes: fin.sizeBytes ?? sizeBytes,
|
|
221
|
+
exists: false
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
catch (err) {
|
|
225
|
+
// Abort so orphaned parts don't bill silently (backed by the S3 lifecycle rule too).
|
|
226
|
+
await args.http
|
|
227
|
+
.request("/assets/mpu/abort", {
|
|
228
|
+
method: "POST",
|
|
229
|
+
headers: { "content-type": "application/json" },
|
|
230
|
+
body: JSON.stringify({ uploadId: mp.uploadId, key: mp.key })
|
|
231
|
+
})
|
|
232
|
+
.catch(() => undefined);
|
|
233
|
+
throw err;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/** Drive the framer through SHA-256, returning the hex digest + total byte count. Node/Bun only. */
|
|
237
|
+
async function hashAndSizeViaDrive(drive) {
|
|
238
|
+
const { createHash } = await import("node:crypto");
|
|
239
|
+
const hash = createHash("sha256");
|
|
240
|
+
let sizeBytes = 0;
|
|
241
|
+
await drive((chunk) => {
|
|
242
|
+
hash.update(chunk);
|
|
243
|
+
sizeBytes += chunk.length;
|
|
244
|
+
});
|
|
245
|
+
return { hashHex: hash.digest("hex"), sizeBytes };
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Repackage an arbitrary-boundary byte stream into fixed `partSize` parts (the
|
|
249
|
+
* last may be smaller), invoking `emit` once per full part. Efficient: front-of-
|
|
250
|
+
* queue splitting, no O(n²) buffer growth.
|
|
251
|
+
*/
|
|
252
|
+
function makePartChunker(partSize, emit) {
|
|
253
|
+
const chunks = [];
|
|
254
|
+
let buffered = 0;
|
|
255
|
+
const emitPart = async (size) => {
|
|
256
|
+
const part = new Uint8Array(size);
|
|
257
|
+
let off = 0;
|
|
258
|
+
while (off < size) {
|
|
259
|
+
const head = chunks[0];
|
|
260
|
+
const take = Math.min(head.length, size - off);
|
|
261
|
+
part.set(head.subarray(0, take), off);
|
|
262
|
+
off += take;
|
|
263
|
+
if (take === head.length)
|
|
264
|
+
chunks.shift();
|
|
265
|
+
else
|
|
266
|
+
chunks[0] = head.subarray(take);
|
|
267
|
+
}
|
|
268
|
+
buffered -= size;
|
|
269
|
+
await emit(part);
|
|
270
|
+
};
|
|
271
|
+
return {
|
|
272
|
+
push: async (chunk) => {
|
|
273
|
+
if (chunk.length === 0)
|
|
274
|
+
return;
|
|
275
|
+
chunks.push(chunk);
|
|
276
|
+
buffered += chunk.length;
|
|
277
|
+
while (buffered >= partSize)
|
|
278
|
+
await emitPart(partSize);
|
|
279
|
+
},
|
|
280
|
+
flush: async () => {
|
|
281
|
+
if (buffered > 0)
|
|
282
|
+
await emitPart(buffered);
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
/** PUT one part with bounded retry; refreshes the URL once on a 403 (expiry). Returns the ETag. */
|
|
287
|
+
async function putPartWithRetry(fetchImpl, url, bytes, contentType, refreshUrl) {
|
|
288
|
+
let currentUrl = url;
|
|
289
|
+
let refreshed = false;
|
|
290
|
+
for (let attempt = 1; attempt <= DIRECT_UPLOAD_MAX_ATTEMPTS; attempt++) {
|
|
291
|
+
let response;
|
|
292
|
+
try {
|
|
293
|
+
response = await fetchImpl(currentUrl, {
|
|
294
|
+
method: "PUT",
|
|
295
|
+
headers: { "content-type": contentType ?? "application/zip" },
|
|
296
|
+
body: bytes
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
catch (err) {
|
|
300
|
+
if (attempt < DIRECT_UPLOAD_MAX_ATTEMPTS && isRetryableUploadError(err))
|
|
301
|
+
continue;
|
|
302
|
+
throw directUploadNetworkError(currentUrl, err, attempt);
|
|
303
|
+
}
|
|
304
|
+
if (response.ok) {
|
|
305
|
+
const etag = response.headers?.get?.("etag") ?? response.headers?.get?.("ETag") ?? "";
|
|
306
|
+
return etag.replace(/"/g, "");
|
|
307
|
+
}
|
|
308
|
+
// A 403 mid-upload is a presign-expiry; refresh the URL once and retry.
|
|
309
|
+
if (response.status === 403 && !refreshed) {
|
|
310
|
+
refreshed = true;
|
|
311
|
+
await response.text().catch(() => "");
|
|
312
|
+
currentUrl = await refreshUrl();
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
if (attempt < DIRECT_UPLOAD_MAX_ATTEMPTS && isRetryableUploadStatus(response.status)) {
|
|
316
|
+
await response.text().catch(() => "");
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
const detail = await response.text().catch(() => "");
|
|
320
|
+
throw directUploadResponseError(currentUrl, response.status, detail, attempt);
|
|
321
|
+
}
|
|
322
|
+
throw directUploadResponseError(currentUrl, 0, "exhausted retries", DIRECT_UPLOAD_MAX_ATTEMPTS);
|
|
323
|
+
}
|
|
109
324
|
async function putWithRetry(fetchImpl, uploadUrl, init) {
|
|
110
325
|
for (let attempt = 1; attempt <= DIRECT_UPLOAD_MAX_ATTEMPTS; attempt++) {
|
|
111
326
|
let response;
|
package/dist/asset-upload.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-upload.js","sourceRoot":"","sources":["../src/asset-upload.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"asset-upload.js","sourceRoot":"","sources":["../src/asset-upload.ts"],"names":[],"mappings":"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"}
|
package/dist/bundle.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ToolInputSchema } from "./_contracts/index.js";
|
|
1
|
+
import { type BundleSymlink, type ToolInputSchema } from "./_contracts/index.js";
|
|
2
2
|
/**
|
|
3
3
|
* In-memory skill bundle: a flat path -> bytes map and the
|
|
4
4
|
* deterministically-zipped representation.
|
|
@@ -9,11 +9,10 @@ import { type ToolInputSchema } from "./_contracts/index.js";
|
|
|
9
9
|
* recomputes the canonical hash on receipt — SDK-side hashing is NOT
|
|
10
10
|
* part of any contract, so we don't expose one for workspace uploads.
|
|
11
11
|
*
|
|
12
|
-
* For
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* (mismatch → submission rejected).
|
|
12
|
+
* For workspace skills the SDK computes an advisory `sha256` of the
|
|
13
|
+
* canonicalised zip via `hashSkillBundle()` before upserting the skill by name.
|
|
14
|
+
* The platform verifies the hash against the uploaded bytes and uses it for
|
|
15
|
+
* deduplication.
|
|
17
16
|
*/
|
|
18
17
|
export interface BundledSkill {
|
|
19
18
|
readonly zip: Uint8Array;
|
|
@@ -22,7 +21,18 @@ export interface BundledSkill {
|
|
|
22
21
|
}
|
|
23
22
|
/** Inline files map: path -> contents (UTF-8 string or raw bytes). */
|
|
24
23
|
export type SkillFiles = Readonly<Record<string, string | Uint8Array>>;
|
|
25
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Fidelity metadata captured from a local directory walk: `exec` are the
|
|
26
|
+
* bundle-relative paths that restore executable (0o755); `symlinks` are captured
|
|
27
|
+
* links. When non-empty it is serialized into the {@link RESERVED_META_ENTRY}
|
|
28
|
+
* sidecar, appended LAST so a pure-content bundle stays byte-identical to the
|
|
29
|
+
* pre-fidelity output (dedup continuity).
|
|
30
|
+
*/
|
|
31
|
+
export interface BundleMeta {
|
|
32
|
+
readonly exec?: readonly string[];
|
|
33
|
+
readonly symlinks?: readonly BundleSymlink[];
|
|
34
|
+
}
|
|
35
|
+
export declare function bundleSkillFiles(files: SkillFiles, meta?: BundleMeta): BundledSkill;
|
|
26
36
|
export interface BundledTool {
|
|
27
37
|
readonly zip: Uint8Array;
|
|
28
38
|
readonly fileCount: number;
|
|
@@ -34,13 +44,12 @@ export interface ToolBundleManifest {
|
|
|
34
44
|
readonly input_schema: ToolInputSchema;
|
|
35
45
|
readonly entry: string;
|
|
36
46
|
}
|
|
37
|
-
export declare function bundleToolFiles(files: SkillFiles, manifest: ToolBundleManifest): BundledTool;
|
|
47
|
+
export declare function bundleToolFiles(files: SkillFiles, manifest: ToolBundleManifest, meta?: BundleMeta): BundledTool;
|
|
38
48
|
/**
|
|
39
|
-
* Compute `sha256:<hex>` of the given canonicalised zip bytes. Used by
|
|
40
|
-
* `
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* and browsers without polyfills.
|
|
49
|
+
* Compute `sha256:<hex>` of the given canonicalised zip bytes. Used by the
|
|
50
|
+
* `Skill.from*` / `File` / `AgentsMd` factories to populate the draft's
|
|
51
|
+
* `contentHash` field. The hash is advisory — the BFF verifies
|
|
52
|
+
* it against the uploaded zip; a mismatch is rejected. Web-Crypto-only so the
|
|
53
|
+
* SDK works in Bun, Node, edge runtimes, and browsers without polyfills.
|
|
45
54
|
*/
|
|
46
55
|
export declare function hashSkillBundle(zipBytes: Uint8Array): Promise<string>;
|
package/dist/bundle.js
CHANGED
|
@@ -1,7 +1,32 @@
|
|
|
1
1
|
import { zipSync } from "fflate";
|
|
2
|
-
import { SKILL_BUNDLE_LIMITS, validateSkillBundleEntry } from "./_contracts/index.js";
|
|
2
|
+
import { RESERVED_META_ENTRY, SKILL_BUNDLE_LIMITS, bundleManifestIsEmpty, serializeBundleManifest, validateSkillBundleEntry } from "./_contracts/index.js";
|
|
3
3
|
const TEXT = new TextEncoder();
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Build the ordered {@link Zippable} for a collected content map: content entries
|
|
6
|
+
* sorted lexicographically, then (when `meta` carries any exec/symlink) the
|
|
7
|
+
* canonical `.aexmeta.json` sidecar appended LAST. Insertion order is the zip
|
|
8
|
+
* order (fflate iterates keys in insertion order), so the sidecar is always the
|
|
9
|
+
* final entry and a metadata-free bundle is byte-identical to today's output.
|
|
10
|
+
*/
|
|
11
|
+
function buildCanonicalZippable(collected, meta) {
|
|
12
|
+
const sorted = [...collected.entries()].sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0));
|
|
13
|
+
const zippable = {};
|
|
14
|
+
for (const [path, bytes] of sorted) {
|
|
15
|
+
zippable[path] = [bytes, { mtime: ZIP_EPOCH }];
|
|
16
|
+
}
|
|
17
|
+
if (meta && !bundleManifestIsEmpty(meta)) {
|
|
18
|
+
const sidecar = serializeBundleManifest({ v: 1, exec: meta.exec ?? [], symlinks: meta.symlinks ?? [] });
|
|
19
|
+
zippable[RESERVED_META_ENTRY] = [sidecar, { mtime: ZIP_EPOCH }];
|
|
20
|
+
}
|
|
21
|
+
return zippable;
|
|
22
|
+
}
|
|
23
|
+
/** Reject a user file colliding with the reserved sidecar name (matches the `tool.json` precedent). */
|
|
24
|
+
function assertNotReservedMetaPath(path, kind) {
|
|
25
|
+
if (path === RESERVED_META_ENTRY) {
|
|
26
|
+
throw new Error(`${kind} files must not include reserved "${RESERVED_META_ENTRY}"; fidelity metadata is emitted by the SDK`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function bundleSkillFiles(files, meta) {
|
|
5
30
|
if (!files || typeof files !== "object") {
|
|
6
31
|
throw new Error("Skill files map is required");
|
|
7
32
|
}
|
|
@@ -21,6 +46,7 @@ export function bundleSkillFiles(files) {
|
|
|
21
46
|
throw new Error(`Skill file "${rawPath}" must be a string or Uint8Array`);
|
|
22
47
|
}
|
|
23
48
|
const entry = validateSkillBundleEntry({ path: rawPath, size: bytes.byteLength });
|
|
49
|
+
assertNotReservedMetaPath(entry.path, "Skill bundle");
|
|
24
50
|
if (entry.path === "SKILL.md") {
|
|
25
51
|
hasSkillMd = true;
|
|
26
52
|
}
|
|
@@ -41,19 +67,16 @@ export function bundleSkillFiles(files) {
|
|
|
41
67
|
// Sort entries and pin every mtime to the epoch so the byte output is
|
|
42
68
|
// identical across machines and re-runs (the BFF re-canonicalises and
|
|
43
69
|
// recomputes the canonical hash, so this is for retry-safety / debug
|
|
44
|
-
// reproducibility rather than a wire-shape contract).
|
|
45
|
-
|
|
46
|
-
const zippable =
|
|
47
|
-
for (const [path, bytes] of sorted) {
|
|
48
|
-
zippable[path] = [bytes, { mtime: ZIP_EPOCH }];
|
|
49
|
-
}
|
|
70
|
+
// reproducibility rather than a wire-shape contract). The fidelity sidecar,
|
|
71
|
+
// when present, is appended LAST so a metadata-free bundle is byte-identical.
|
|
72
|
+
const zippable = buildCanonicalZippable(collected, meta);
|
|
50
73
|
const zip = zipSync(zippable, { level: 6 });
|
|
51
74
|
if (zip.byteLength > SKILL_BUNDLE_LIMITS.maxCompressedBytes) {
|
|
52
75
|
throw new Error(`Skill bundle exceeds compressed cap of ${SKILL_BUNDLE_LIMITS.maxCompressedBytes} bytes (got ${zip.byteLength})`);
|
|
53
76
|
}
|
|
54
77
|
return { zip, fileCount: entries.length, compressedSize: zip.byteLength };
|
|
55
78
|
}
|
|
56
|
-
export function bundleToolFiles(files, manifest) {
|
|
79
|
+
export function bundleToolFiles(files, manifest, meta) {
|
|
57
80
|
if (!files || typeof files !== "object") {
|
|
58
81
|
throw new Error("Tool files map is required");
|
|
59
82
|
}
|
|
@@ -74,6 +97,7 @@ export function bundleToolFiles(files, manifest) {
|
|
|
74
97
|
throw new Error(`Tool file "${rawPath}" must be a string or Uint8Array`);
|
|
75
98
|
}
|
|
76
99
|
const entry = validateSkillBundleEntry({ path: rawPath, size: bytes.byteLength });
|
|
100
|
+
assertNotReservedMetaPath(entry.path, "Tool bundle");
|
|
77
101
|
totalDecompressed += bytes.byteLength;
|
|
78
102
|
if (totalDecompressed > SKILL_BUNDLE_LIMITS.maxDecompressedBytes) {
|
|
79
103
|
throw new Error(`Tool bundle exceeds decompressed cap of ${SKILL_BUNDLE_LIMITS.maxDecompressedBytes} bytes`);
|
|
@@ -93,11 +117,7 @@ export function bundleToolFiles(files, manifest) {
|
|
|
93
117
|
throw new Error('Tool bundle files must not include reserved "tool.json"; pass manifest fields to Tool.fromFiles instead');
|
|
94
118
|
}
|
|
95
119
|
collected.set("tool.json", manifestBytes);
|
|
96
|
-
const
|
|
97
|
-
const zippable = {};
|
|
98
|
-
for (const [path, bytes] of sorted) {
|
|
99
|
-
zippable[path] = [bytes, { mtime: ZIP_EPOCH }];
|
|
100
|
-
}
|
|
120
|
+
const zippable = buildCanonicalZippable(collected, meta);
|
|
101
121
|
const zip = zipSync(zippable, { level: 6 });
|
|
102
122
|
if (zip.byteLength > SKILL_BUNDLE_LIMITS.maxCompressedBytes) {
|
|
103
123
|
throw new Error(`Tool bundle exceeds compressed cap of ${SKILL_BUNDLE_LIMITS.maxCompressedBytes} bytes (got ${zip.byteLength})`);
|
|
@@ -106,12 +126,11 @@ export function bundleToolFiles(files, manifest) {
|
|
|
106
126
|
}
|
|
107
127
|
const ZIP_EPOCH = new Date(Date.UTC(1980, 0, 1));
|
|
108
128
|
/**
|
|
109
|
-
* Compute `sha256:<hex>` of the given canonicalised zip bytes. Used by
|
|
110
|
-
* `
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
* and browsers without polyfills.
|
|
129
|
+
* Compute `sha256:<hex>` of the given canonicalised zip bytes. Used by the
|
|
130
|
+
* `Skill.from*` / `File` / `AgentsMd` factories to populate the draft's
|
|
131
|
+
* `contentHash` field. The hash is advisory — the BFF verifies
|
|
132
|
+
* it against the uploaded zip; a mismatch is rejected. Web-Crypto-only so the
|
|
133
|
+
* SDK works in Bun, Node, edge runtimes, and browsers without polyfills.
|
|
115
134
|
*/
|
|
116
135
|
export async function hashSkillBundle(zipBytes) {
|
|
117
136
|
const subtle = globalThis.crypto?.subtle;
|
package/dist/bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiB,MAAM,QAAQ,CAAC;AAChD,OAAO,
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical zip framer — the deterministic, content-addressed zip layer the
|
|
3
|
+
* asset upload path dedups on. Two canonical forms, both byte-stable:
|
|
4
|
+
*
|
|
5
|
+
* Canonical A (the ~99% case: every entry ≤ {@link ENTRY_RAM_CAP}) — a custom
|
|
6
|
+
* per-entry framer that reproduces fflate's `zipSync(..., {level:6})` output
|
|
7
|
+
* BYTE-FOR-BYTE (sorted entries, epoch mtime, per-entry crc32, per-entry
|
|
8
|
+
* one-shot `deflateSync` level 6, real sizes in a flag-0 local header) while
|
|
9
|
+
* holding only ONE entry in memory at a time. Because it equals `zipSync`, a
|
|
10
|
+
* streamed large bundle dedups against a small in-memory bundle of the same
|
|
11
|
+
* content — no dedup seam. Pinned forever by a golden byte-identity test.
|
|
12
|
+
*
|
|
13
|
+
* Canonical B (a bundle containing ANY entry > {@link ENTRY_RAM_CAP}, e.g. a
|
|
14
|
+
* lone multi-GB dataset file) — fflate's streaming `Zip`/`ZipDeflate` driven
|
|
15
|
+
* with a PINNED {@link CANONICAL_B_PUSH_BYTES} push size. It does NOT equal
|
|
16
|
+
* `zipSync` (it emits streaming data descriptors, GP-flag bit 3), but it IS
|
|
17
|
+
* internally deterministic: same input → same bytes every time (pinned chunk
|
|
18
|
+
* size + pinned fflate version). Its own second canonical / dedup namespace,
|
|
19
|
+
* pinned by its own golden determinism test. A single giant entry cannot be
|
|
20
|
+
* both `zipSync`-identical AND framed in O(part) memory, so this is the
|
|
21
|
+
* accepted tradeoff (such a file has no small twin to dedup against).
|
|
22
|
+
*
|
|
23
|
+
* Browser-safe: this module imports ONLY fflate (no `node:*`). The node-only
|
|
24
|
+
* streaming SHA-256 + multipart sink live in the callers (file.ts / asset-upload).
|
|
25
|
+
*/
|
|
26
|
+
/** Epoch every entry mtime is pinned to (matches the pre-streaming `zipSync` path). */
|
|
27
|
+
export declare const ZIP_EPOCH: Date;
|
|
28
|
+
/**
|
|
29
|
+
* Per-entry raw-byte ceiling for Canonical A. A single entry above this cannot be
|
|
30
|
+
* one-shot `deflateSync`-ed within a bounded memory budget, so a bundle carrying
|
|
31
|
+
* any such entry falls to Canonical B. A memory-budget knob, NOT a correctness
|
|
32
|
+
* boundary (the golden tests pin both forms).
|
|
33
|
+
*/
|
|
34
|
+
export declare const ENTRY_RAM_CAP: number;
|
|
35
|
+
/** Pinned push size for Canonical B's streaming deflate. LOAD-BEARING for determinism. */
|
|
36
|
+
export declare const CANONICAL_B_PUSH_BYTES: number;
|
|
37
|
+
/** One-shot CRC-32 over `bytes`. */
|
|
38
|
+
export declare function crc32(bytes: Uint8Array): number;
|
|
39
|
+
/** A byte sink; may apply backpressure (pass-2 multipart) or run sync (pass-1 hash). */
|
|
40
|
+
export type ByteSink = (chunk: Uint8Array) => void | Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* One bundle entry to frame, in FINAL canonical order. `name` is the forward-slash
|
|
43
|
+
* bundle-relative path; `size` its raw byte length (from `stat` or the in-memory
|
|
44
|
+
* bytes). `read()` yields the whole entry (Canonical A / small); `openStream()` is
|
|
45
|
+
* required only when `size > ENTRY_RAM_CAP` (Canonical B).
|
|
46
|
+
*/
|
|
47
|
+
export interface ZipEntrySource {
|
|
48
|
+
readonly name: string;
|
|
49
|
+
readonly size: number;
|
|
50
|
+
read(): Uint8Array | Promise<Uint8Array>;
|
|
51
|
+
openStream?(): AsyncIterable<Uint8Array>;
|
|
52
|
+
}
|
|
53
|
+
/** True when the bundle must use Canonical B (some entry exceeds the RAM cap). */
|
|
54
|
+
export declare function bundleNeedsCanonicalB(entries: readonly {
|
|
55
|
+
readonly size: number;
|
|
56
|
+
}[]): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Stream the canonical zip of `entries` (FINAL canonical order) into `sink`.
|
|
59
|
+
* Picks Canonical A (byte-identical to `zipSync`) unless an entry exceeds
|
|
60
|
+
* {@link ENTRY_RAM_CAP}, in which case the whole bundle uses Canonical B.
|
|
61
|
+
*/
|
|
62
|
+
export declare function streamBundleZip(entries: readonly ZipEntrySource[], sink: ByteSink): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Synchronous Canonical-A convenience — frame an ordered `[name, bytes]` list to
|
|
65
|
+
* a single buffer. Used by the golden byte-identity test (`=== zipSync`) and by
|
|
66
|
+
* callers that already hold all bytes in memory. NOT for giant entries.
|
|
67
|
+
*/
|
|
68
|
+
export declare function frameCanonicalZipSync(entries: ReadonlyArray<readonly [string, Uint8Array]>): Uint8Array;
|