@aexhq/sdk 0.46.5-canary → 0.51.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.
Files changed (346) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +38 -0
  3. package/README.md +54 -29
  4. package/dist/client/aex.d.ts +33 -0
  5. package/dist/client/aex.js +108 -0
  6. package/dist/client/aex.js.map +1 -0
  7. package/dist/client/credentials.d.ts +25 -0
  8. package/dist/client/credentials.js +97 -0
  9. package/dist/client/credentials.js.map +1 -0
  10. package/dist/client/routing.d.ts +7 -0
  11. package/dist/client/routing.js +29 -0
  12. package/dist/client/routing.js.map +1 -0
  13. package/dist/downloads/download.d.ts +18 -0
  14. package/dist/downloads/download.js +67 -0
  15. package/dist/downloads/download.js.map +1 -0
  16. package/dist/generated/errors.d.ts +12 -0
  17. package/dist/generated/errors.js +82 -0
  18. package/dist/generated/errors.js.map +1 -0
  19. package/dist/generated/models.d.ts +1392 -0
  20. package/dist/generated/models.js +62 -0
  21. package/dist/generated/models.js.map +1 -0
  22. package/dist/generated/resources.d.ts +710 -0
  23. package/dist/generated/resources.js +582 -0
  24. package/dist/generated/resources.js.map +1 -0
  25. package/dist/generated/routes.d.ts +44 -0
  26. package/dist/generated/routes.js +1905 -0
  27. package/dist/generated/routes.js.map +1 -0
  28. package/dist/index.d.ts +21 -50
  29. package/dist/index.js +14 -62
  30. package/dist/index.js.map +1 -1
  31. package/dist/node/session-file-limits.d.ts +4 -0
  32. package/dist/node/session-file-limits.js +7 -0
  33. package/dist/node/session-file-limits.js.map +1 -0
  34. package/dist/node/session-files.d.ts +80 -0
  35. package/dist/node/session-files.js +254 -0
  36. package/dist/node/session-files.js.map +1 -0
  37. package/dist/observations/stream.d.ts +1 -0
  38. package/dist/observations/stream.js +18 -0
  39. package/dist/observations/stream.js.map +1 -0
  40. package/dist/transport/errors.d.ts +60 -0
  41. package/dist/transport/errors.js +107 -0
  42. package/dist/transport/errors.js.map +1 -0
  43. package/dist/transport/pagination.d.ts +8 -0
  44. package/dist/transport/pagination.js +34 -0
  45. package/dist/transport/pagination.js.map +1 -0
  46. package/dist/transport/retry.d.ts +21 -0
  47. package/dist/transport/retry.js +37 -0
  48. package/dist/transport/retry.js.map +1 -0
  49. package/dist/transport/transport.d.ts +25 -0
  50. package/dist/transport/transport.js +33 -0
  51. package/dist/transport/transport.js.map +1 -0
  52. package/package.json +67 -30
  53. package/dist/_contracts/account-operations.d.ts +0 -101
  54. package/dist/_contracts/account-operations.js +0 -242
  55. package/dist/_contracts/account-types.d.ts +0 -461
  56. package/dist/_contracts/account-types.js +0 -1
  57. package/dist/_contracts/api-key.d.ts +0 -61
  58. package/dist/_contracts/api-key.js +0 -101
  59. package/dist/_contracts/api-routes.d.ts +0 -20
  60. package/dist/_contracts/api-routes.js +0 -109
  61. package/dist/_contracts/archive-limits.d.ts +0 -3
  62. package/dist/_contracts/archive-limits.js +0 -23
  63. package/dist/_contracts/asset-authoring.d.ts +0 -22
  64. package/dist/_contracts/asset-authoring.js +0 -106
  65. package/dist/_contracts/asset-bundle.d.ts +0 -64
  66. package/dist/_contracts/asset-bundle.js +0 -263
  67. package/dist/_contracts/asset-upload-helper.d.ts +0 -31
  68. package/dist/_contracts/asset-upload-helper.js +0 -84
  69. package/dist/_contracts/billing-admission.d.ts +0 -29
  70. package/dist/_contracts/billing-admission.js +0 -28
  71. package/dist/_contracts/bundle-manifest.d.ts +0 -89
  72. package/dist/_contracts/bundle-manifest.js +0 -158
  73. package/dist/_contracts/canonical-sha256.d.ts +0 -8
  74. package/dist/_contracts/canonical-sha256.js +0 -8
  75. package/dist/_contracts/connection-ticket.d.ts +0 -22
  76. package/dist/_contracts/connection-ticket.js +0 -54
  77. package/dist/_contracts/continuation-event.d.ts +0 -31
  78. package/dist/_contracts/continuation-event.js +0 -6
  79. package/dist/_contracts/contract-parse-error.d.ts +0 -12
  80. package/dist/_contracts/contract-parse-error.js +0 -51
  81. package/dist/_contracts/error-codes.d.ts +0 -26
  82. package/dist/_contracts/error-codes.js +0 -116
  83. package/dist/_contracts/error-factory.d.ts +0 -32
  84. package/dist/_contracts/error-factory.js +0 -174
  85. package/dist/_contracts/event-envelope.d.ts +0 -471
  86. package/dist/_contracts/event-envelope.js +0 -501
  87. package/dist/_contracts/event-stream-client.d.ts +0 -122
  88. package/dist/_contracts/event-stream-client.js +0 -445
  89. package/dist/_contracts/event-view.d.ts +0 -44
  90. package/dist/_contracts/event-view.js +0 -69
  91. package/dist/_contracts/failure-class.d.ts +0 -29
  92. package/dist/_contracts/failure-class.js +0 -73
  93. package/dist/_contracts/http.d.ts +0 -135
  94. package/dist/_contracts/http.js +0 -434
  95. package/dist/_contracts/ids.d.ts +0 -66
  96. package/dist/_contracts/ids.js +0 -119
  97. package/dist/_contracts/index.d.ts +0 -42
  98. package/dist/_contracts/index.js +0 -52
  99. package/dist/_contracts/internal.d.ts +0 -55
  100. package/dist/_contracts/internal.js +0 -113
  101. package/dist/_contracts/models.d.ts +0 -30
  102. package/dist/_contracts/models.js +0 -28
  103. package/dist/_contracts/operation-core.d.ts +0 -36
  104. package/dist/_contracts/operation-core.js +0 -70
  105. package/dist/_contracts/operations.d.ts +0 -218
  106. package/dist/_contracts/operations.js +0 -1496
  107. package/dist/_contracts/otlp-projection.d.ts +0 -78
  108. package/dist/_contracts/otlp-projection.js +0 -171
  109. package/dist/_contracts/post-hook.d.ts +0 -31
  110. package/dist/_contracts/post-hook.js +0 -61
  111. package/dist/_contracts/provider-fault.d.ts +0 -34
  112. package/dist/_contracts/provider-fault.js +0 -68
  113. package/dist/_contracts/retry-core.d.ts +0 -29
  114. package/dist/_contracts/retry-core.js +0 -79
  115. package/dist/_contracts/runner-event.d.ts +0 -117
  116. package/dist/_contracts/runner-event.js +0 -172
  117. package/dist/_contracts/runtime-kind.d.ts +0 -60
  118. package/dist/_contracts/runtime-kind.js +0 -70
  119. package/dist/_contracts/runtime-manifest.d.ts +0 -121
  120. package/dist/_contracts/runtime-manifest.js +0 -83
  121. package/dist/_contracts/runtime-security-profile.d.ts +0 -26
  122. package/dist/_contracts/runtime-security-profile.js +0 -73
  123. package/dist/_contracts/runtime-sizes.d.ts +0 -104
  124. package/dist/_contracts/runtime-sizes.js +0 -111
  125. package/dist/_contracts/runtime-types.d.ts +0 -618
  126. package/dist/_contracts/runtime-types.js +0 -58
  127. package/dist/_contracts/schemas/asset-bundle.d.ts +0 -70
  128. package/dist/_contracts/schemas/asset-bundle.js +0 -107
  129. package/dist/_contracts/schemas/asset-ref.d.ts +0 -61
  130. package/dist/_contracts/schemas/asset-ref.js +0 -118
  131. package/dist/_contracts/schemas/bundle-manifest.d.ts +0 -66
  132. package/dist/_contracts/schemas/bundle-manifest.js +0 -77
  133. package/dist/_contracts/schemas/index.d.ts +0 -32
  134. package/dist/_contracts/schemas/index.js +0 -30
  135. package/dist/_contracts/schemas/mcp-server.d.ts +0 -99
  136. package/dist/_contracts/schemas/mcp-server.js +0 -209
  137. package/dist/_contracts/schemas/models.d.ts +0 -29
  138. package/dist/_contracts/schemas/models.js +0 -51
  139. package/dist/_contracts/schemas/numeric.d.ts +0 -18
  140. package/dist/_contracts/schemas/numeric.js +0 -28
  141. package/dist/_contracts/schemas/post-hook.d.ts +0 -45
  142. package/dist/_contracts/schemas/post-hook.js +0 -68
  143. package/dist/_contracts/schemas/response-assets.d.ts +0 -75
  144. package/dist/_contracts/schemas/response-assets.js +0 -81
  145. package/dist/_contracts/schemas/response-billing.d.ts +0 -208
  146. package/dist/_contracts/schemas/response-billing.js +0 -139
  147. package/dist/_contracts/schemas/response-common.d.ts +0 -132
  148. package/dist/_contracts/schemas/response-common.js +0 -162
  149. package/dist/_contracts/schemas/response-identity.d.ts +0 -648
  150. package/dist/_contracts/schemas/response-identity.js +0 -131
  151. package/dist/_contracts/schemas/response-mcp-servers.d.ts +0 -51
  152. package/dist/_contracts/schemas/response-mcp-servers.js +0 -32
  153. package/dist/_contracts/schemas/response-secrets.d.ts +0 -50
  154. package/dist/_contracts/schemas/response-secrets.js +0 -32
  155. package/dist/_contracts/schemas/response-sessions-internal.d.ts +0 -200
  156. package/dist/_contracts/schemas/response-sessions-internal.js +0 -142
  157. package/dist/_contracts/schemas/response-sessions.d.ts +0 -1598
  158. package/dist/_contracts/schemas/response-sessions.js +0 -377
  159. package/dist/_contracts/schemas/response-webhooks.d.ts +0 -76
  160. package/dist/_contracts/schemas/response-webhooks.js +0 -42
  161. package/dist/_contracts/schemas/response-workspace.d.ts +0 -225
  162. package/dist/_contracts/schemas/response-workspace.js +0 -99
  163. package/dist/_contracts/schemas/runtime-kind.d.ts +0 -31
  164. package/dist/_contracts/schemas/runtime-kind.js +0 -29
  165. package/dist/_contracts/schemas/runtime-security-profile.d.ts +0 -28
  166. package/dist/_contracts/schemas/runtime-security-profile.js +0 -26
  167. package/dist/_contracts/schemas/runtime-sizes.d.ts +0 -70
  168. package/dist/_contracts/schemas/runtime-sizes.js +0 -127
  169. package/dist/_contracts/schemas/session-limits.d.ts +0 -34
  170. package/dist/_contracts/schemas/session-limits.js +0 -39
  171. package/dist/_contracts/schemas/session-machine.d.ts +0 -23
  172. package/dist/_contracts/schemas/session-machine.js +0 -24
  173. package/dist/_contracts/schemas/session-request-config.d.ts +0 -58
  174. package/dist/_contracts/schemas/session-request-config.js +0 -134
  175. package/dist/_contracts/schemas/session-webhook.d.ts +0 -11
  176. package/dist/_contracts/schemas/session-webhook.js +0 -38
  177. package/dist/_contracts/schemas/side-effect-audit.d.ts +0 -98
  178. package/dist/_contracts/schemas/side-effect-audit.js +0 -102
  179. package/dist/_contracts/schemas/submission-assets.d.ts +0 -117
  180. package/dist/_contracts/schemas/submission-assets.js +0 -147
  181. package/dist/_contracts/schemas/submission-body.d.ts +0 -251
  182. package/dist/_contracts/schemas/submission-body.js +0 -378
  183. package/dist/_contracts/schemas/submission-environment.d.ts +0 -79
  184. package/dist/_contracts/schemas/submission-environment.js +0 -179
  185. package/dist/_contracts/schemas/submission-request.d.ts +0 -158
  186. package/dist/_contracts/schemas/submission-request.js +0 -49
  187. package/dist/_contracts/schemas/submission-secrets.d.ts +0 -47
  188. package/dist/_contracts/schemas/submission-secrets.js +0 -108
  189. package/dist/_contracts/schemas/wire.d.ts +0 -118
  190. package/dist/_contracts/schemas/wire.js +0 -171
  191. package/dist/_contracts/schemas/workspace-resources.d.ts +0 -50
  192. package/dist/_contracts/schemas/workspace-resources.js +0 -87
  193. package/dist/_contracts/sdk-errors.d.ts +0 -212
  194. package/dist/_contracts/sdk-errors.js +0 -313
  195. package/dist/_contracts/sdk-secrets.d.ts +0 -67
  196. package/dist/_contracts/sdk-secrets.js +0 -427
  197. package/dist/_contracts/session-archive.d.ts +0 -16
  198. package/dist/_contracts/session-archive.js +0 -92
  199. package/dist/_contracts/session-artifacts.d.ts +0 -189
  200. package/dist/_contracts/session-artifacts.js +0 -264
  201. package/dist/_contracts/session-config.d.ts +0 -373
  202. package/dist/_contracts/session-config.js +0 -562
  203. package/dist/_contracts/session-cost-types.d.ts +0 -211
  204. package/dist/_contracts/session-cost-types.js +0 -69
  205. package/dist/_contracts/session-cost.d.ts +0 -8
  206. package/dist/_contracts/session-cost.js +0 -582
  207. package/dist/_contracts/session-custody.d.ts +0 -165
  208. package/dist/_contracts/session-custody.js +0 -345
  209. package/dist/_contracts/session-file-query.d.ts +0 -14
  210. package/dist/_contracts/session-file-query.js +0 -178
  211. package/dist/_contracts/session-record.d.ts +0 -112
  212. package/dist/_contracts/session-record.js +0 -165
  213. package/dist/_contracts/session-retention.d.ts +0 -201
  214. package/dist/_contracts/session-retention.js +0 -450
  215. package/dist/_contracts/side-effect-audit.d.ts +0 -126
  216. package/dist/_contracts/side-effect-audit.js +0 -520
  217. package/dist/_contracts/sse.d.ts +0 -74
  218. package/dist/_contracts/sse.js +0 -227
  219. package/dist/_contracts/stable.d.ts +0 -45
  220. package/dist/_contracts/stable.js +0 -62
  221. package/dist/_contracts/status.d.ts +0 -25
  222. package/dist/_contracts/status.js +0 -57
  223. package/dist/_contracts/submission-limits.d.ts +0 -61
  224. package/dist/_contracts/submission-limits.js +0 -60
  225. package/dist/_contracts/submission.d.ts +0 -547
  226. package/dist/_contracts/submission.js +0 -812
  227. package/dist/_contracts/suggest.d.ts +0 -15
  228. package/dist/_contracts/suggest.js +0 -53
  229. package/dist/_contracts/testing/response-bindings.d.ts +0 -45
  230. package/dist/_contracts/testing/response-bindings.js +0 -256
  231. package/dist/_contracts/testing/wire-conformance-entry.d.ts +0 -10
  232. package/dist/_contracts/testing/wire-conformance-entry.js +0 -8
  233. package/dist/_contracts/testing/wire-conformance.d.ts +0 -169
  234. package/dist/_contracts/testing/wire-conformance.js +0 -276
  235. package/dist/_contracts/turn-trace.d.ts +0 -28
  236. package/dist/_contracts/turn-trace.js +0 -1
  237. package/dist/_contracts/unknown-field-error.d.ts +0 -13
  238. package/dist/_contracts/unknown-field-error.js +0 -21
  239. package/dist/_contracts/value-guards.d.ts +0 -20
  240. package/dist/_contracts/value-guards.js +0 -34
  241. package/dist/_contracts/webhook-verify.d.ts +0 -34
  242. package/dist/_contracts/webhook-verify.js +0 -93
  243. package/dist/_contracts/wire-observer.d.ts +0 -49
  244. package/dist/_contracts/wire-observer.js +0 -34
  245. package/dist/_contracts/workflow-status.d.ts +0 -7
  246. package/dist/_contracts/workflow-status.js +0 -43
  247. package/dist/_contracts/workspace-resources.d.ts +0 -98
  248. package/dist/_contracts/workspace-resources.js +0 -39
  249. package/dist/archive-limits.d.ts +0 -1
  250. package/dist/archive-limits.js +0 -2
  251. package/dist/archive-limits.js.map +0 -1
  252. package/dist/asset-upload.d.ts +0 -47
  253. package/dist/asset-upload.js +0 -269
  254. package/dist/asset-upload.js.map +0 -1
  255. package/dist/bundle.d.ts +0 -9
  256. package/dist/bundle.js +0 -20
  257. package/dist/bundle.js.map +0 -1
  258. package/dist/canonical-zip.d.ts +0 -68
  259. package/dist/canonical-zip.js +0 -355
  260. package/dist/canonical-zip.js.map +0 -1
  261. package/dist/cli.mjs +0 -12048
  262. package/dist/cli.mjs.sha256 +0 -1
  263. package/dist/client-types.d.ts +0 -192
  264. package/dist/client-types.js +0 -2
  265. package/dist/client-types.js.map +0 -1
  266. package/dist/client.d.ts +0 -464
  267. package/dist/client.js +0 -1207
  268. package/dist/client.js.map +0 -1
  269. package/dist/event-projection.d.ts +0 -22
  270. package/dist/event-projection.js +0 -380
  271. package/dist/event-projection.js.map +0 -1
  272. package/dist/fetch-archive.d.ts +0 -16
  273. package/dist/fetch-archive.js +0 -252
  274. package/dist/fetch-archive.js.map +0 -1
  275. package/dist/file.d.ts +0 -96
  276. package/dist/file.js +0 -272
  277. package/dist/file.js.map +0 -1
  278. package/dist/instructions.d.ts +0 -20
  279. package/dist/instructions.js +0 -40
  280. package/dist/instructions.js.map +0 -1
  281. package/dist/legacy-session-provider-fault.d.ts +0 -7
  282. package/dist/legacy-session-provider-fault.js +0 -38
  283. package/dist/legacy-session-provider-fault.js.map +0 -1
  284. package/dist/mcp-server.d.ts +0 -84
  285. package/dist/mcp-server.js +0 -117
  286. package/dist/mcp-server.js.map +0 -1
  287. package/dist/node-fs.d.ts +0 -29
  288. package/dist/node-fs.js +0 -19
  289. package/dist/node-fs.js.map +0 -1
  290. package/dist/node-walk.d.ts +0 -69
  291. package/dist/node-walk.js +0 -151
  292. package/dist/node-walk.js.map +0 -1
  293. package/dist/path-basename.d.ts +0 -5
  294. package/dist/path-basename.js +0 -9
  295. package/dist/path-basename.js.map +0 -1
  296. package/dist/retry.d.ts +0 -70
  297. package/dist/retry.js +0 -155
  298. package/dist/retry.js.map +0 -1
  299. package/dist/secret.d.ts +0 -65
  300. package/dist/secret.js +0 -110
  301. package/dist/secret.js.map +0 -1
  302. package/dist/session-validate.d.ts +0 -100
  303. package/dist/session-validate.js +0 -303
  304. package/dist/session-validate.js.map +0 -1
  305. package/dist/skill.d.ts +0 -99
  306. package/dist/skill.js +0 -169
  307. package/dist/skill.js.map +0 -1
  308. package/dist/submission-wire.d.ts +0 -13
  309. package/dist/submission-wire.js +0 -69
  310. package/dist/submission-wire.js.map +0 -1
  311. package/dist/tool.d.ts +0 -41
  312. package/dist/tool.js +0 -76
  313. package/dist/tool.js.map +0 -1
  314. package/dist/version.d.ts +0 -9
  315. package/dist/version.js +0 -10
  316. package/dist/version.js.map +0 -1
  317. package/docs/authentication.md +0 -125
  318. package/docs/billing.md +0 -164
  319. package/docs/cleanup.md +0 -27
  320. package/docs/concepts/agent-tools.md +0 -47
  321. package/docs/concepts/composition.md +0 -60
  322. package/docs/concepts/providers-and-runtimes.md +0 -121
  323. package/docs/concepts/sessions.md +0 -51
  324. package/docs/concepts/subagents.md +0 -35
  325. package/docs/credentials.md +0 -116
  326. package/docs/defaults.md +0 -51
  327. package/docs/errors.md +0 -258
  328. package/docs/events.md +0 -143
  329. package/docs/files.md +0 -130
  330. package/docs/limits-and-quotas.md +0 -114
  331. package/docs/limits.md +0 -51
  332. package/docs/mcp.md +0 -47
  333. package/docs/networking.md +0 -114
  334. package/docs/provider-runtime-capabilities.md +0 -32
  335. package/docs/public-surface.json +0 -73
  336. package/docs/quickstart.md +0 -135
  337. package/docs/release.md +0 -44
  338. package/docs/retries.md +0 -108
  339. package/docs/secrets.md +0 -141
  340. package/docs/session-config.md +0 -51
  341. package/docs/session-record.md +0 -58
  342. package/docs/skills.md +0 -65
  343. package/docs/telemetry.md +0 -66
  344. package/docs/testing.md +0 -35
  345. package/docs/vision-skills.md +0 -94
  346. package/docs/webhooks.md +0 -143
@@ -1,252 +0,0 @@
1
- import { unzipSync } from "fflate";
2
- import { SKILL_BUNDLE_LIMITS } from "./_contracts/index.js";
3
- import { splitSkillBundleMetadata } from "./bundle.js";
4
- /**
5
- * Fetch a zip-archived skill from a URL and reduce it to the same in-memory
6
- * `SkillFiles` map that `Skill.fromDir` consumes.
7
- *
8
- * This runs in the SDK process (the caller's own app), so the URL is
9
- * caller-controlled — there is no SSRF surface here. Host the skill yourself
10
- * and hand the SDK a temporary signed URL (e.g. an S3 presigned URL); it only
11
- * needs to be valid for this fetch, because the workspace publisher snapshots
12
- * the bytes afterwards.
13
- *
14
- * Signed URLs carry secrets in their query string, so the query is never echoed
15
- * in error messages.
16
- */
17
- const DEFAULT_TIMEOUT_MS = 30_000;
18
- const MAX_SKILL_ARCHIVE_DOWNLOAD_BYTES = SKILL_BUNDLE_LIMITS.maxCompressedBytes;
19
- class SkillArchiveDownloadError extends Error {
20
- }
21
- export async function fetchSkillArchive(url, opts = {}) {
22
- if (typeof url !== "string" || url.length === 0) {
23
- throw new Error("Skill.fromUrl: url is required");
24
- }
25
- const fetchImpl = opts.fetch ?? globalThis.fetch;
26
- if (typeof fetchImpl !== "function") {
27
- throw new Error("Skill.fromUrl: global fetch is unavailable; pass args.fetch " +
28
- "(Bun, Node 18+, or a fetch-capable runtime is required)");
29
- }
30
- const bytes = await download(url, fetchImpl, opts.timeoutMs ?? DEFAULT_TIMEOUT_MS);
31
- if (opts.sha256) {
32
- await verifySha256(bytes, opts.sha256, url);
33
- }
34
- const entries = unzip(bytes, url);
35
- return splitSkillBundleMetadata(resolveSkillRoot(entries, url), "Skill.fromUrl");
36
- }
37
- // ---------------------------------------------------------------------------
38
- // Download + integrity
39
- // ---------------------------------------------------------------------------
40
- async function download(url, fetchImpl, timeoutMs) {
41
- const controller = new AbortController();
42
- const timer = setTimeout(() => controller.abort(), timeoutMs);
43
- try {
44
- const res = await fetchImpl(url, { signal: controller.signal });
45
- if (!res.ok) {
46
- throw new SkillArchiveDownloadError(`Skill.fromUrl: fetch for ${redactUrl(url)} returned HTTP ${res.status}`);
47
- }
48
- // Early guard on a declared size so a clearly-too-big archive fails before
49
- // we buffer it. The authoritative caps are re-checked by bundleSkillFiles.
50
- const declaredRaw = res.headers.get("content-length");
51
- const declared = declaredRaw !== null && /^\d+$/.test(declaredRaw) ? Number(declaredRaw) : undefined;
52
- if (declared !== undefined && declared > MAX_SKILL_ARCHIVE_DOWNLOAD_BYTES) {
53
- throw new SkillArchiveDownloadError(`Skill.fromUrl: archive at ${redactUrl(url)} declares ${declared} bytes, ` +
54
- `exceeding the ${MAX_SKILL_ARCHIVE_DOWNLOAD_BYTES}-byte compressed cap`);
55
- }
56
- const bytes = await readResponseBytes(res, url, controller.signal);
57
- if (bytes.byteLength === 0) {
58
- throw new SkillArchiveDownloadError(`Skill.fromUrl: archive at ${redactUrl(url)} is empty`);
59
- }
60
- return bytes;
61
- }
62
- catch (err) {
63
- if (err instanceof SkillArchiveDownloadError)
64
- throw err;
65
- throw new Error(`Skill.fromUrl: fetch failed for ${redactUrl(url)}: ${errMessage(err)}`);
66
- }
67
- finally {
68
- clearTimeout(timer);
69
- }
70
- }
71
- async function readResponseBytes(res, url, signal) {
72
- if (!res.body) {
73
- const bytes = new Uint8Array(await withAbort(res.arrayBuffer(), signal));
74
- ensureWithinCompressedCap(bytes.byteLength, url);
75
- return bytes;
76
- }
77
- const reader = res.body.getReader();
78
- const chunks = [];
79
- let total = 0;
80
- try {
81
- while (true) {
82
- const { done, value } = await withAbort(reader.read(), signal);
83
- if (done)
84
- break;
85
- if (!value || value.byteLength === 0)
86
- continue;
87
- total += value.byteLength;
88
- ensureWithinCompressedCap(total, url);
89
- chunks.push(value);
90
- }
91
- }
92
- finally {
93
- await reader.cancel().catch(() => { });
94
- }
95
- return concatBytes(chunks, total);
96
- }
97
- function ensureWithinCompressedCap(bytes, url) {
98
- if (bytes > MAX_SKILL_ARCHIVE_DOWNLOAD_BYTES) {
99
- throw new SkillArchiveDownloadError(`Skill.fromUrl: archive at ${redactUrl(url)} is ${bytes} bytes, ` +
100
- `exceeding the ${MAX_SKILL_ARCHIVE_DOWNLOAD_BYTES}-byte compressed cap`);
101
- }
102
- }
103
- function concatBytes(chunks, total) {
104
- if (chunks.length === 1)
105
- return chunks[0];
106
- const out = new Uint8Array(total);
107
- let offset = 0;
108
- for (const chunk of chunks) {
109
- out.set(chunk, offset);
110
- offset += chunk.byteLength;
111
- }
112
- return out;
113
- }
114
- function withAbort(promise, signal) {
115
- if (signal.aborted)
116
- return Promise.reject(abortError());
117
- return new Promise((resolve, reject) => {
118
- const onAbort = () => reject(abortError());
119
- signal.addEventListener("abort", onAbort, { once: true });
120
- promise.then(resolve, reject).finally(() => signal.removeEventListener("abort", onAbort));
121
- });
122
- }
123
- function abortError() {
124
- if (typeof DOMException === "function") {
125
- return new DOMException("The operation was aborted", "AbortError");
126
- }
127
- const err = new Error("The operation was aborted");
128
- err.name = "AbortError";
129
- return err;
130
- }
131
- async function verifySha256(bytes, expected, url) {
132
- const want = (expected.startsWith("sha256:") ? expected.slice("sha256:".length) : expected).toLowerCase();
133
- if (!/^[0-9a-f]{64}$/.test(want)) {
134
- throw new Error(`Skill.fromUrl: sha256 must be 64 hex chars (optionally prefixed "sha256:"), ` +
135
- `got ${JSON.stringify(expected)}`);
136
- }
137
- const got = await sha256Hex(bytes);
138
- if (got !== want) {
139
- throw new Error(`Skill.fromUrl: archive integrity check failed for ${redactUrl(url)}: ` +
140
- `expected sha256:${want} but downloaded bytes hash to sha256:${got}`);
141
- }
142
- }
143
- // ---------------------------------------------------------------------------
144
- // Unzip + skill-root resolution
145
- // ---------------------------------------------------------------------------
146
- function unzip(bytes, url) {
147
- let fileCount = 0;
148
- let declaredTotal = 0;
149
- try {
150
- return unzipSync(bytes, {
151
- filter: (file) => {
152
- if (/[\\/]$/.test(file.name))
153
- return false;
154
- fileCount += 1;
155
- if (fileCount > SKILL_BUNDLE_LIMITS.maxFiles + 1) {
156
- throw new SkillArchiveDownloadError(`Skill.fromUrl: archive at ${redactUrl(url)} exceeds the ` +
157
- `${SKILL_BUNDLE_LIMITS.maxFiles}-entry cap plus one control record`);
158
- }
159
- declaredTotal += file.originalSize;
160
- if (declaredTotal > SKILL_BUNDLE_LIMITS.maxDecompressedBytes) {
161
- throw new SkillArchiveDownloadError(`Skill.fromUrl: archive at ${redactUrl(url)} declares more than ` +
162
- `${SKILL_BUNDLE_LIMITS.maxDecompressedBytes} decompressed bytes`);
163
- }
164
- return true;
165
- }
166
- });
167
- }
168
- catch (err) {
169
- if (err instanceof SkillArchiveDownloadError)
170
- throw err;
171
- throw new Error(`Skill.fromUrl: could not unzip the archive at ${redactUrl(url)} ` +
172
- `(expected a .zip): ${errMessage(err)}`);
173
- }
174
- }
175
- /**
176
- * Resolve the skill root from unzipped entries:
177
- *
178
- * 1. drop directory entries,
179
- * 2. if `SKILL.md` is already at root, use entries as-is,
180
- * 3. else if there is exactly one common top-level directory AND it contains
181
- * `SKILL.md`, strip that single prefix,
182
- * 4. otherwise throw, listing the archive's actual top-level entries.
183
- *
184
- * We only ever strip a single level, and only when it demonstrably exposes a
185
- * root `SKILL.md` — never speculatively. `bundleSkillFiles` re-asserts the
186
- * SKILL.md-at-root invariant as the authoritative check.
187
- */
188
- function resolveSkillRoot(entries, url) {
189
- const files = {};
190
- for (const [rawPath, bytes] of Object.entries(entries)) {
191
- const path = rawPath.replace(/\\/g, "/");
192
- if (path.endsWith("/")) {
193
- continue; // directory entry
194
- }
195
- files[path] = bytes;
196
- }
197
- const paths = Object.keys(files);
198
- if (paths.length === 0) {
199
- throw new Error(`Skill.fromUrl: archive at ${redactUrl(url)} contains no files`);
200
- }
201
- if (Object.prototype.hasOwnProperty.call(files, "SKILL.md")) {
202
- return files;
203
- }
204
- const topSegments = new Set(paths.map((p) => p.split("/")[0]));
205
- if (topSegments.size === 1) {
206
- const prefix = `${[...topSegments][0]}/`;
207
- if (Object.prototype.hasOwnProperty.call(files, `${prefix}SKILL.md`)) {
208
- const stripped = {};
209
- for (const [p, b] of Object.entries(files)) {
210
- stripped[p.slice(prefix.length)] = b;
211
- }
212
- return stripped;
213
- }
214
- }
215
- const roots = [...new Set(paths.map((p) => (p.includes("/") ? `${p.split("/")[0]}/` : p)))].sort();
216
- throw new Error(`Skill.fromUrl: fetched archive at ${redactUrl(url)} must contain SKILL.md at its root, ` +
217
- `or inside a single top-level folder. Found top-level entries: ${roots.join(", ")}`);
218
- }
219
- // ---------------------------------------------------------------------------
220
- // Helpers
221
- // ---------------------------------------------------------------------------
222
- /** Strip the query string so signed-URL secrets never reach error text/logs. */
223
- function redactUrl(url) {
224
- try {
225
- const u = new URL(url);
226
- return u.search ? `${u.origin}${u.pathname}?…` : `${u.origin}${u.pathname}`;
227
- }
228
- catch {
229
- const q = url.indexOf("?");
230
- return q >= 0 ? `${url.slice(0, q)}?…` : url;
231
- }
232
- }
233
- function errMessage(err) {
234
- return err instanceof Error ? err.message : String(err);
235
- }
236
- async function sha256Hex(bytes) {
237
- const subtle = globalThis.crypto?.subtle;
238
- if (!subtle) {
239
- throw new Error("Skill.fromUrl: globalThis.crypto.subtle is unavailable; " +
240
- "Bun, Node 18+, or a Web-Crypto-capable runtime is required");
241
- }
242
- const copy = new Uint8Array(bytes.byteLength);
243
- copy.set(bytes);
244
- const digest = await subtle.digest("SHA-256", copy.buffer);
245
- const view = new Uint8Array(digest);
246
- let out = "";
247
- for (let i = 0; i < view.length; i++) {
248
- out += view[i].toString(16).padStart(2, "0");
249
- }
250
- return out;
251
- }
252
- //# sourceMappingURL=fetch-archive.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fetch-archive.js","sourceRoot":"","sources":["../src/fetch-archive.ts"],"names":[],"mappings":"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"}
package/dist/file.d.ts DELETED
@@ -1,96 +0,0 @@
1
- import { type ByteSink } from "./canonical-zip.js";
2
- import { type IgnoreOptions } from "./node-walk.js";
3
- /**
4
- * File — arbitrary bytes (single file or zipped folder) delivered to
5
- * the agent as a mounted runtime resource. The managed runtime UNZIPS the
6
- * snapshotted bytes into the `mountPath` DIRECTORY during workspace
7
- * materialization, preserving the real filename + extension.
8
- *
9
- * const settings = await File.fromPath("./settings.json");
10
- * const dataset = await File.fromPath("./data/");
11
- * const input = await client.workspace.files.publish(settings);
12
- * await client.start({ assets: { files: [input] }, message: "..." });
13
- *
14
- * `mountPath` is the absolute container directory the file unzips into; it
15
- * defaults to `/workspace` (the agent's default working directory), so a file
16
- * handed with no `mountPath` lands directly in the agent's cwd — a single file
17
- * `subtitles.srt` becomes `/workspace/subtitles.srt`, a folder lands its entries
18
- * under `/workspace/`. The resolved path is surfaced back on the Session record.
19
- *
20
- * FIDELITY: a directory walk captures executable bits and symlinks into a
21
- * `.aexmeta.json` sidecar (emitted only when such metadata exists, so a
22
- * pure-content bundle stays byte-identical → dedup continuity), and honors
23
- * `.aexignore` (gitignore-compatible) plus always-on defaults (`.git/`,
24
- * `node_modules/`). SCALE: a large input (total raw size over the streaming
25
- * threshold, `File.fromPath` only) is uploaded via a streaming two-pass
26
- * multipart flow that holds only one entry + one part in memory within the
27
- * runtime asset archive envelope.
28
- *
29
- * Publish drafts through `aex.workspace.files.publish(file)`, then pin the
30
- * returned immutable ref in `assets.files`.
31
- */
32
- export declare class File {
33
- #private;
34
- private constructor();
35
- get ref(): DraftFileRef;
36
- get isDraft(): boolean;
37
- /**
38
- * Build a draft File from raw bytes. `name` is the REAL filename (with its
39
- * extension, e.g. `"subtitles.srt"`) — it is preserved as the single zip
40
- * entry so the agent finds it at `<mountPath>/<name>` after unzip. The bytes
41
- * are wrapped in a single-entry canonical zip so storage stays uniform across
42
- * all file uploads. `mountPath` is the absolute container directory the file
43
- * unzips into; it defaults to `/workspace`.
44
- */
45
- static fromBytes(args: {
46
- readonly name: string;
47
- readonly bytes: Uint8Array;
48
- readonly mountPath?: string;
49
- }): Promise<File>;
50
- /**
51
- * Read a local file or directory and build a draft File. A single file
52
- * preserves its real basename (with extension) as the sole zip entry, so the
53
- * agent finds it at `<mountPath>/<basename>` after unzip. Directories walk
54
- * recursively into a canonical zip (sorted relative paths, deterministic
55
- * mtime), landing each entry under `<mountPath>/`. Executable bits + symlinks
56
- * are captured into a `.aexmeta.json` sidecar; `.aexignore` (+ defaults) prune
57
- * the walk. `mountPath` defaults to `/workspace`. The optional `name` is only
58
- * the storage slug (dedup label); it never affects the on-disk filename.
59
- */
60
- static fromPath(path: string, args?: {
61
- readonly name?: string;
62
- readonly mountPath?: string;
63
- readonly ignore?: IgnoreOptions;
64
- }): Promise<File>;
65
- /**
66
- * Internal: yield the draft's zipped bytes and metadata to the workspace publisher.
67
- * Returns undefined for a streaming (large) draft — use {@link _takeDraftStream}.
68
- */
69
- _takeDraftBundle(): {
70
- name: string;
71
- contentHash: string;
72
- bytes: Uint8Array;
73
- mountPath: string;
74
- } | undefined;
75
- /**
76
- * Internal: yield the draft's canonical-zip stream driver so `client.start` can
77
- * upload it via the streaming multipart flow. Returns undefined for the small
78
- * (in-memory) draft — use {@link _takeDraftBundle}.
79
- */
80
- _takeDraftStream(): {
81
- name: string;
82
- mountPath: string;
83
- drive: ZipStreamDriver;
84
- } | undefined;
85
- toJSON(): never;
86
- }
87
- export interface DraftFileRef {
88
- readonly kind: "draft";
89
- readonly name: string;
90
- /** sha256 of the canonical zip (small path only); undefined for a streaming draft (hashed at upload). */
91
- readonly contentHash?: string;
92
- /** Absolute container directory the file unzips into (always set; defaults to /workspace). */
93
- readonly mountPath: string;
94
- }
95
- /** A retryable driver that frames the canonical zip into `sink` (one call per upload pass). */
96
- export type ZipStreamDriver = (sink: ByteSink) => Promise<void>;
package/dist/file.js DELETED
@@ -1,272 +0,0 @@
1
- import { createReadStream } from "node:fs";
2
- import { readFile, stat } from "node:fs/promises";
3
- import { ASSET_ARCHIVE_LIMITS, DEFAULT_FILE_MOUNT_PATH, RESERVED_META_ENTRY, assertValidMountPath, bundleManifestIsEmpty, serializeBundleManifest } from "./_contracts/index.js";
4
- import { bundleSingleFile, hashSkillBundle } from "./_contracts/internal.js";
5
- import { frameCanonicalZipSync, streamBundleZip } from "./canonical-zip.js";
6
- import { walkDirectory } from "./node-walk.js";
7
- import { assertArchiveCompressedSize, assertArchiveEntryCount, assertArchiveExpandedSize } from "./archive-limits.js";
8
- import { crossPlatformBasename } from "./path-basename.js";
9
- /**
10
- * File — arbitrary bytes (single file or zipped folder) delivered to
11
- * the agent as a mounted runtime resource. The managed runtime UNZIPS the
12
- * snapshotted bytes into the `mountPath` DIRECTORY during workspace
13
- * materialization, preserving the real filename + extension.
14
- *
15
- * const settings = await File.fromPath("./settings.json");
16
- * const dataset = await File.fromPath("./data/");
17
- * const input = await client.workspace.files.publish(settings);
18
- * await client.start({ assets: { files: [input] }, message: "..." });
19
- *
20
- * `mountPath` is the absolute container directory the file unzips into; it
21
- * defaults to `/workspace` (the agent's default working directory), so a file
22
- * handed with no `mountPath` lands directly in the agent's cwd — a single file
23
- * `subtitles.srt` becomes `/workspace/subtitles.srt`, a folder lands its entries
24
- * under `/workspace/`. The resolved path is surfaced back on the Session record.
25
- *
26
- * FIDELITY: a directory walk captures executable bits and symlinks into a
27
- * `.aexmeta.json` sidecar (emitted only when such metadata exists, so a
28
- * pure-content bundle stays byte-identical → dedup continuity), and honors
29
- * `.aexignore` (gitignore-compatible) plus always-on defaults (`.git/`,
30
- * `node_modules/`). SCALE: a large input (total raw size over the streaming
31
- * threshold, `File.fromPath` only) is uploaded via a streaming two-pass
32
- * multipart flow that holds only one entry + one part in memory within the
33
- * runtime asset archive envelope.
34
- *
35
- * Publish drafts through `aex.workspace.files.publish(file)`, then pin the
36
- * returned immutable ref in `assets.files`.
37
- */
38
- export class File {
39
- #ref;
40
- #bytes;
41
- /** Large-input streaming driver — re-runs the deterministic canonical-zip framer per pass. */
42
- #drive;
43
- constructor(ref, bytes, drive) {
44
- this.#ref = ref;
45
- this.#bytes = bytes;
46
- this.#drive = drive;
47
- }
48
- get ref() {
49
- return this.#ref;
50
- }
51
- get isDraft() {
52
- return true;
53
- }
54
- /**
55
- * Build a draft File from raw bytes. `name` is the REAL filename (with its
56
- * extension, e.g. `"subtitles.srt"`) — it is preserved as the single zip
57
- * entry so the agent finds it at `<mountPath>/<name>` after unzip. The bytes
58
- * are wrapped in a single-entry canonical zip so storage stays uniform across
59
- * all file uploads. `mountPath` is the absolute container directory the file
60
- * unzips into; it defaults to `/workspace`.
61
- */
62
- static async fromBytes(args) {
63
- if (!args || typeof args.name !== "string") {
64
- throw new Error("File.fromBytes: name must be a string");
65
- }
66
- const filename = sanitiseFilename(args.name);
67
- if (filename === undefined) {
68
- throw new Error(`File.fromBytes: name ${JSON.stringify(args.name)} is not a valid filename ` +
69
- "(no '/', '\\\\', NUL, or path traversal; 1..255 chars)");
70
- }
71
- if (!(args.bytes instanceof Uint8Array) || args.bytes.byteLength === 0) {
72
- throw new Error("File.fromBytes: bytes must be a non-empty Uint8Array");
73
- }
74
- const mountPath = resolveMountPath(args.mountPath, "File.fromBytes");
75
- const zip = bundleSingleFile(filename, args.bytes, "File.fromBytes");
76
- const contentHash = await hashSkillBundle(zip);
77
- const ref = {
78
- kind: "draft",
79
- name: slugFromFilename(filename),
80
- contentHash,
81
- mountPath
82
- };
83
- return new File(ref, zip);
84
- }
85
- /**
86
- * Read a local file or directory and build a draft File. A single file
87
- * preserves its real basename (with extension) as the sole zip entry, so the
88
- * agent finds it at `<mountPath>/<basename>` after unzip. Directories walk
89
- * recursively into a canonical zip (sorted relative paths, deterministic
90
- * mtime), landing each entry under `<mountPath>/`. Executable bits + symlinks
91
- * are captured into a `.aexmeta.json` sidecar; `.aexignore` (+ defaults) prune
92
- * the walk. `mountPath` defaults to `/workspace`. The optional `name` is only
93
- * the storage slug (dedup label); it never affects the on-disk filename.
94
- */
95
- static async fromPath(path, args) {
96
- const stats = await stat(path);
97
- const mountPath = resolveMountPath(args?.mountPath, "File.fromPath");
98
- // `name` is only the storage slug (dedup label), never the on-disk filename.
99
- const slug = args?.name !== undefined ? slugFromFilename(args.name) : inferNameFromPath(path);
100
- return stats.isDirectory()
101
- ? File.#fromDirectory(path, slug, mountPath, args?.ignore)
102
- : File.#fromSingleFile(path, slug, mountPath, stats.size, (stats.mode & 0o111) !== 0);
103
- }
104
- /** Directory branch: walk + fidelity sidecar + small/streaming path selection. */
105
- static async #fromDirectory(path, slug, mountPath, ignore) {
106
- const walk = await walkDirectory(path, ignore);
107
- if (walk.entries.length === 0 && walk.symlinks.length === 0) {
108
- throw new Error(`File.fromPath: directory ${JSON.stringify(path)} is empty (no regular files or symlinks)`);
109
- }
110
- const meta = { exec: walk.exec, symlinks: walk.symlinks };
111
- const sidecar = bundleManifestIsEmpty(meta)
112
- ? undefined
113
- : serializeBundleManifest({ v: 1, exec: walk.exec, symlinks: walk.symlinks });
114
- assertArchiveExpandedSize(walk.totalSize + (sidecar?.byteLength ?? 0), "File.fromPath");
115
- assertArchiveEntryCount(walk.entries.length + walk.symlinks.length, "File.fromPath");
116
- if (walk.totalSize <= SMALL_UPLOAD_THRESHOLD_BYTES) {
117
- // Small: read all bytes and build the canonical zip in memory (single PUT).
118
- const ordered = [];
119
- for (const entry of walk.entries) {
120
- ordered.push([entry.rel, new Uint8Array(await readFile(entry.absPath))]);
121
- }
122
- if (sidecar)
123
- ordered.push([RESERVED_META_ENTRY, sidecar]);
124
- const zip = frameCanonicalZipSync(ordered);
125
- assertArchiveCompressedSize(zip.byteLength, "File.fromPath");
126
- const contentHash = await hashSkillBundle(zip);
127
- return new File({ kind: "draft", name: slug, contentHash, mountPath }, zip);
128
- }
129
- // Large: stream the canonical zip (never materialize the whole bundle).
130
- const sources = buildEntrySources(walk.entries, sidecar);
131
- const drive = (sink) => streamBundleZip(sources, sink);
132
- return new File({ kind: "draft", name: slug, mountPath }, undefined, drive);
133
- }
134
- /** Single-file branch: preserve the basename; capture the +x bit; small/streaming by size. */
135
- static async #fromSingleFile(path, slug, mountPath, size, isExecutable) {
136
- const basename = crossPlatformBasename(path);
137
- const filename = sanitiseFilename(basename) ?? `${slug}`;
138
- const sidecar = isExecutable
139
- ? serializeBundleManifest({ v: 1, exec: [filename], symlinks: [] })
140
- : undefined;
141
- assertArchiveExpandedSize(size + (sidecar?.byteLength ?? 0), "File.fromPath");
142
- if (size <= SMALL_UPLOAD_THRESHOLD_BYTES) {
143
- const bytes = new Uint8Array(await readFile(path));
144
- const ordered = [[filename, bytes]];
145
- if (sidecar)
146
- ordered.push([RESERVED_META_ENTRY, sidecar]);
147
- const zip = frameCanonicalZipSync(ordered);
148
- assertArchiveCompressedSize(zip.byteLength, "File.fromPath");
149
- const contentHash = await hashSkillBundle(zip);
150
- return new File({ kind: "draft", name: slug, contentHash, mountPath }, zip);
151
- }
152
- const sources = [
153
- {
154
- name: filename,
155
- size,
156
- read: async () => new Uint8Array(await readFile(path)),
157
- openStream: () => fileByteStream(path)
158
- }
159
- ];
160
- if (sidecar)
161
- sources.push({ name: RESERVED_META_ENTRY, size: sidecar.length, read: () => sidecar });
162
- const drive = (sink) => streamBundleZip(sources, sink);
163
- return new File({ kind: "draft", name: slug, mountPath }, undefined, drive);
164
- }
165
- /**
166
- * Internal: yield the draft's zipped bytes and metadata to the workspace publisher.
167
- * Returns undefined for a streaming (large) draft — use {@link _takeDraftStream}.
168
- */
169
- _takeDraftBundle() {
170
- if (this.#ref.kind !== "draft" || !this.#bytes || this.#ref.contentHash === undefined) {
171
- return undefined;
172
- }
173
- return {
174
- name: this.#ref.name,
175
- contentHash: this.#ref.contentHash,
176
- bytes: this.#bytes,
177
- mountPath: this.#ref.mountPath
178
- };
179
- }
180
- /**
181
- * Internal: yield the draft's canonical-zip stream driver so `client.start` can
182
- * upload it via the streaming multipart flow. Returns undefined for the small
183
- * (in-memory) draft — use {@link _takeDraftBundle}.
184
- */
185
- _takeDraftStream() {
186
- if (this.#ref.kind !== "draft" || !this.#drive)
187
- return undefined;
188
- return { name: this.#ref.name, mountPath: this.#ref.mountPath, drive: this.#drive };
189
- }
190
- toJSON() {
191
- throw new Error("File drafts cannot be submitted directly; publish with aex.workspace.files.publish(...)");
192
- }
193
- }
194
- const ZIP_EPOCH = new Date(Date.UTC(1980, 0, 1));
195
- // Private compatibility rule for a filename-derived storage slug. This is not
196
- // the persisted workspace file/instruction resource-name admission contract.
197
- const DERIVED_FILE_STORAGE_SLUG_PATTERN = /^[a-z0-9][a-z0-9-]{0,62}[a-z0-9]$/;
198
- /**
199
- * Total raw input size (via `stat`, before reading bytes) above which
200
- * `File.fromPath` streams the upload instead of building the whole zip in
201
- * memory. A pure performance/simplicity switch, NOT a correctness boundary — the
202
- * streaming framer is byte-identical to the in-memory `zipSync` for Canonical A,
203
- * so a bundle at the threshold dedups either way.
204
- */
205
- const SMALL_UPLOAD_THRESHOLD_BYTES = ASSET_ARCHIVE_LIMITS.maxCompressedBytes;
206
- /** Build lazy zip entry sources from walked descriptors, appending the sidecar LAST. */
207
- function buildEntrySources(entries, sidecar) {
208
- const sources = entries.map((entry) => ({
209
- name: entry.rel,
210
- size: entry.size,
211
- read: async () => new Uint8Array(await readFile(entry.absPath)),
212
- openStream: () => fileByteStream(entry.absPath)
213
- }));
214
- if (sidecar) {
215
- sources.push({ name: RESERVED_META_ENTRY, size: sidecar.length, read: () => sidecar });
216
- }
217
- return sources;
218
- }
219
- /** Async-iterate a file's bytes in native stream chunks (for Canonical-B giant entries). */
220
- async function* fileByteStream(absPath) {
221
- const stream = createReadStream(absPath);
222
- for await (const chunk of stream) {
223
- yield chunk;
224
- }
225
- }
226
- /**
227
- * Resolve + validate a caller-supplied `mountPath`, defaulting to `/workspace`.
228
- * Shares {@link assertValidMountPath} with the contracts parser so the SDK and
229
- * the BFF reject the same malformed paths.
230
- */
231
- function resolveMountPath(mountPath, fn) {
232
- if (mountPath === undefined)
233
- return DEFAULT_FILE_MOUNT_PATH;
234
- if (typeof mountPath !== "string") {
235
- throw new Error(`${fn}: mountPath must be a string`);
236
- }
237
- assertValidMountPath(mountPath, `${fn}: mountPath`);
238
- return mountPath;
239
- }
240
- /**
241
- * Validate a real on-disk filename (a single path SEGMENT — no separators,
242
- * traversal, NUL, or control chars; 1..255 bytes). Returns the trimmed name, or
243
- * `undefined` when it cannot be a filename. Used to preserve the real filename +
244
- * extension inside the single-entry zip.
245
- */
246
- function sanitiseFilename(name) {
247
- const trimmed = name.trim();
248
- if (trimmed.length === 0 || trimmed.length > 255)
249
- return undefined;
250
- if (trimmed === "." || trimmed === "..")
251
- return undefined;
252
- if (/[/\\]/.test(trimmed))
253
- return undefined;
254
- // Reject NUL + C0/C1/DEL control chars (filename must stay a printable segment).
255
- // eslint-disable-next-line no-control-regex
256
- if (/[\u0000-\u001f\u007f]/.test(trimmed))
257
- return undefined;
258
- return trimmed;
259
- }
260
- function slugFromFilename(filename) {
261
- const stem = filename.replace(/\.[^.]+$/, "").toLowerCase();
262
- const slug = stem.replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
263
- if (slug.length >= 2 && DERIVED_FILE_STORAGE_SLUG_PATTERN.test(slug))
264
- return slug;
265
- if (slug.length === 1)
266
- return `f-${slug}`;
267
- return `file-${Date.now().toString(36)}`;
268
- }
269
- function inferNameFromPath(path) {
270
- return slugFromFilename(crossPlatformBasename(path));
271
- }
272
- //# sourceMappingURL=file.js.map
package/dist/file.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"file.js","sourceRoot":"","sources":["../src/file.ts"],"names":[],"mappings":"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"}