@5ss/ai-tools 3.0.3 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,10 @@ All notable changes to `@5ss/ai-tools` are documented here.
4
4
 
5
5
  Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Releases are cut by [semantic-release](https://semantic-release.gitbook.io/) from [conventional commits](https://www.conventionalcommits.org/).
6
6
 
7
+ ## [3.2.0](https://github.com/five-star-solutions-co/ai-tools/compare/v3.1.0...v3.2.0) (2026-08-24)
8
+
9
+ ## [3.1.0](https://github.com/five-star-solutions-co/ai-tools/compare/v3.0.3...v3.1.0) (2026-08-24)
10
+
7
11
  ## [3.0.3](https://github.com/five-star-solutions-co/ai-tools/compare/v3.0.2...v3.0.3) (2026-08-21)
8
12
 
9
13
  ## [3.0.2](https://github.com/five-star-solutions-co/ai-tools/compare/v3.0.1...v3.0.2) (2026-08-12)
@@ -695,10 +695,11 @@ var CloudflareSandboxClient = class CloudflareSandboxClient {
695
695
  secretAccessKey
696
696
  };
697
697
  const body = {
698
- bucket: data.bucket,
699
- mountPath: data.mount_path
698
+ mountPath: data.mount_path,
699
+ options
700
700
  };
701
- if (Object.keys(options).length > 0) body["options"] = options;
701
+ if (endpoint) body["bucket"] = data.bucket;
702
+ else body["binding"] = data.bucket;
702
703
  await this.#http.post(`/v1/sandbox/${encodeURIComponent(data.sandbox_id)}/mount`, body, { label: "Cloudflare Sandbox mount" });
703
704
  return {
704
705
  sandbox_id: data.sandbox_id,
@@ -979,4 +980,4 @@ const cloudflareSandboxModule = defineModule({
979
980
  //#endregion
980
981
  export { readFileInputSchema as $, MAX_FILE_PATH as A, destroySandboxOutputSchema as B, workspaceAbsolutePath as C, MAX_ARG_CHARS as D, MAX_ARGV as E, cloudflareSandboxAuthSchema as F, exportArtifactOutputSchema as G, execOutputSchema as H, createBridgeSessionOutputSchema as I, importArtifactOutputSchema as J, healthOutputSchema as K, createSandboxOutputSchema as L, MAX_LIST_FILES as M, MAX_READ_PATHS as N, MAX_EXEC_TIMEOUT_MS as O, MAX_WRITE_FILES as P, mountBucketOutputSchema as Q, deleteBridgeSessionInputSchema as R, shellQuote as S, DEFAULT_EXEC_TIMEOUT_MS as T, executeCodeInputSchema as U, execInputSchema as V, exportArtifactInputSchema as W, listFilesOutputSchema as X, listFilesInputSchema as Y, mountBucketInputSchema as Z, cloudflareSandboxWriteFilesTool as _, cloudflareSandboxExecTool as a, runningOutputSchema as at, parseExecSse as b, cloudflareSandboxHealthTool as c, unmountBucketInputSchema as ct, cloudflareSandboxModule as d, writeFileOutputSchema as dt, readFileOutputSchema as et, cloudflareSandboxReadFileTool as f, writeFilesInputSchema as ft, cloudflareSandboxWriteFileTool as g, cloudflareSandboxRunningTool as h, cloudflareSandboxDestroyTool as i, removeFilesOutputSchema as it, MAX_FILE_TEXT as j, MAX_FILE_BYTES as k, cloudflareSandboxImportArtifactTool as l, unmountBucketOutputSchema as lt, cloudflareSandboxRemoveFilesTool as m, cloudflareSandboxCreateTool as n, readFilesOutputSchema as nt, cloudflareSandboxExecuteCodeTool as o, sandboxIdInputSchema as ot, cloudflareSandboxReadFilesTool as p, writeFilesOutputSchema as pt, importArtifactInputSchema as q, cloudflareSandboxDeleteSessionTool as r, removeFilesInputSchema as rt, cloudflareSandboxExportArtifactTool as s, sandboxObjectArtifactRefSchema as st, cloudflareSandboxCreateSessionTool as t, readFilesInputSchema as tt, cloudflareSandboxListFilesTool as u, writeFileInputSchema as ut, CloudflareSandboxClient as v, workspaceFileKey as w, resolveWriteFileBytes as x, executeCodeArgv as y, deleteBridgeSessionOutputSchema as z };
981
982
 
982
- //# sourceMappingURL=cloudflare-sandbox-6nX5lIev.js.map
983
+ //# sourceMappingURL=cloudflare-sandbox-BPXbaBOp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cloudflare-sandbox-6nX5lIev.js","names":["#http","#storage","#storageAuth","#putFileBytes","#getFileBytes","#requireStorage"],"sources":["../src/vendors/cloudflare-sandbox/contracts.ts","../src/vendors/cloudflare-sandbox/domain.ts","../src/vendors/cloudflare-sandbox/client.ts","../src/vendors/cloudflare-sandbox/module.ts"],"sourcesContent":["/**\n * Cloudflare Sandbox Bridge HTTP API contracts.\n * Host deploys the bridge Worker; this pack is a Bearer client.\n * @see https://developers.cloudflare.com/sandbox/bridge/http-api/\n */\n\nimport { z } from 'zod'\n\nimport { s3AuthSchema } from '../s3/contracts'\n\nexport const MAX_ARGV = 64\nexport const MAX_ARG_CHARS = 100_000\nexport const MAX_FILE_PATH = 1024\nexport const MAX_FILE_TEXT = 2_000_000\n/** Bridge hard cap is 32 MiB; package tool path uses the same bound. */\nexport const MAX_FILE_BYTES = 32 * 1024 * 1024\nexport const MAX_WRITE_FILES = 20\nexport const MAX_READ_PATHS = 50\nexport const MAX_LIST_FILES = 500\nexport const DEFAULT_EXEC_TIMEOUT_MS = 30_000\nexport const MAX_EXEC_TIMEOUT_MS = 600_000\n\nexport const cloudflareSandboxAuthSchema = z.object({\n\tbase_url: z\n\t\t.string()\n\t\t.min(1)\n\t\t.describe('Sandbox bridge Worker origin, for example https://sandbox-bridge.example.workers.dev'),\n\tapi_key: z.string().min(1).describe('Bridge SANDBOX_API_KEY Bearer token'),\n\tstorage: s3AuthSchema\n\t\t.optional()\n\t\t.describe('Optional S3-compatible storage for importArtifact / exportArtifact (ArtifactRef)')\n})\n\nexport type CloudflareSandboxAuth = z.infer<typeof cloudflareSandboxAuthSchema>\n\n/** Object-store ArtifactRef for sandbox import/export. */\nexport const sandboxObjectArtifactRefSchema = z.object({\n\tstore: z.literal('object').describe('Object store containing the artifact'),\n\tkey: z.string().min(1).describe('Object key'),\n\tmedia_type: z.string().min(1).optional().describe('MIME or format hint when known'),\n\tfilename: z.string().min(1).optional().describe('Original or display file name'),\n\tbyte_length: z.int().min(0).optional().describe('Size in bytes when known')\n})\n\nexport type SandboxObjectArtifactRef = z.infer<typeof sandboxObjectArtifactRefSchema>\n\nconst sandboxId = z.string().min(1).max(200).describe('Sandbox id returned by create')\n\nexport const sandboxIdInputSchema = z.object({\n\tsandbox_id: sandboxId\n})\n\nexport const createSandboxOutputSchema = z.object({\n\tsandbox_id: z.string().describe('Created sandbox id')\n})\n\nexport const destroySandboxOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tdestroyed: z.literal(true)\n})\n\nexport const runningOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\trunning: z.boolean().describe('Whether the container is live')\n})\n\nexport const healthOutputSchema = z.object({\n\tok: z.boolean()\n})\n\nexport const execInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\targv: z\n\t\t.array(z.string().min(1).max(MAX_ARG_CHARS))\n\t\t.min(1)\n\t\t.max(MAX_ARGV)\n\t\t.describe('Command argv array (not a shell string). Example: [\"python3\",\"-c\",\"print(1)\"]'),\n\ttimeout_ms: z\n\t\t.int()\n\t\t.min(1)\n\t\t.max(MAX_EXEC_TIMEOUT_MS)\n\t\t.optional()\n\t\t.describe(`Exec timeout in ms (default ${DEFAULT_EXEC_TIMEOUT_MS})`),\n\tcwd: z.string().min(1).max(MAX_FILE_PATH).optional().describe('Working directory (default /workspace)'),\n\tsession_id: z\n\t\t.string()\n\t\t.min(1)\n\t\t.max(200)\n\t\t.optional()\n\t\t.describe('Optional bridge session id for isolated working directory and runtime state'),\n\tenv: z\n\t\t.record(z.string().min(1).max(128), z.string().max(8_192))\n\t\t.optional()\n\t\t.describe('Optional environment variables for the process when the bridge supports env')\n})\n\nexport const execOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tstdout: z.string().describe('Decoded standard output'),\n\tstderr: z.string().describe('Decoded standard error'),\n\texit_code: z.number().int().optional().describe('Process exit code when the stream ends with exit'),\n\tsuccess: z.boolean().describe('True when exit_code is 0'),\n\terror: z.string().optional().describe('Bridge error message when the stream ends with error'),\n\terror_code: z.string().optional().describe('Bridge error code when present')\n})\n\nconst filePathField = z\n\t.string()\n\t.min(1)\n\t.max(MAX_FILE_PATH)\n\t.describe('Path under workspace (with or without /workspace/ prefix)')\n\nconst sessionIdField = z.string().min(1).max(200).optional().describe('Optional Session-Id header')\n\nconst writeFileBodyFields = {\n\ttext: z.string().max(MAX_FILE_TEXT).optional().describe('Utf-8 file contents (omit when body_base64 is set)'),\n\tbody_base64: z\n\t\t.string()\n\t\t.min(1)\n\t\t.optional()\n\t\t.describe('Base64 file bytes for binary content (omit when text is set; max 32 MiB decoded)')\n}\n\nfunction refineExactlyOneBody(\n\tval: { text?: string | undefined; body_base64?: string | undefined },\n\tctx: z.RefinementCtx\n): void {\n\tconst hasText = val.text !== undefined\n\tconst hasB64 = val.body_base64 !== undefined\n\tif (hasText === hasB64) {\n\t\tctx.addIssue({\n\t\t\tcode: 'custom',\n\t\t\tmessage: 'Provide exactly one of text or body_base64'\n\t\t})\n\t}\n}\n\nexport const writeFileInputSchema = z\n\t.object({\n\t\tsandbox_id: sandboxId,\n\t\tpath: filePathField,\n\t\t...writeFileBodyFields,\n\t\tsession_id: sessionIdField\n\t})\n\t.superRefine(refineExactlyOneBody)\n\nexport const writeFileOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tpath: z.string(),\n\tok: z.literal(true),\n\tbyte_length: z.number().int().nonnegative().optional().describe('Decoded byte length written when known')\n})\n\nexport const readFileInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tpath: filePathField,\n\tencoding: z\n\t\t.enum(['utf8', 'base64'])\n\t\t.optional()\n\t\t.describe('Response encoding (default utf8 for text; use base64 for binary)'),\n\tsession_id: sessionIdField\n})\n\nexport const readFileOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tpath: z.string(),\n\ttext: z.string().optional().describe('Utf-8 contents when encoding is utf8 (default)'),\n\tbody_base64: z.string().optional().describe('Base64 contents when encoding is base64'),\n\tbyte_length: z.number().int().nonnegative().optional().describe('Decoded byte length')\n})\n\nexport const writeFilesInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tfiles: z\n\t\t.array(\n\t\t\tz\n\t\t\t\t.object({\n\t\t\t\t\tpath: z.string().min(1).max(MAX_FILE_PATH).describe('Path under workspace'),\n\t\t\t\t\t...writeFileBodyFields\n\t\t\t\t})\n\t\t\t\t.superRefine(refineExactlyOneBody)\n\t\t)\n\t\t.min(1)\n\t\t.max(MAX_WRITE_FILES)\n\t\t.describe('Files to write under workspace (text or body_base64 each)'),\n\tsession_id: sessionIdField\n})\n\nexport const writeFilesOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tpaths: z.array(z.string()),\n\tok: z.literal(true)\n})\n\nexport const readFilesInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tpaths: z\n\t\t.array(z.string().min(1).max(MAX_FILE_PATH).describe('Path under workspace'))\n\t\t.min(1)\n\t\t.max(MAX_READ_PATHS)\n\t\t.describe('Paths to read under workspace'),\n\tencoding: z.enum(['utf8', 'base64']).optional().describe('Response encoding for all files (default utf8)'),\n\tsession_id: sessionIdField\n})\n\nexport const readFilesOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tfiles: z.array(\n\t\tz.object({\n\t\t\tpath: z.string(),\n\t\t\ttext: z.string().optional(),\n\t\t\tbody_base64: z.string().optional(),\n\t\t\tbyte_length: z.number().int().nonnegative().optional()\n\t\t})\n\t)\n})\n\nexport const listFilesInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tdirectory_path: z.string().max(MAX_FILE_PATH).optional().describe('Directory to list (default /workspace)'),\n\tsession_id: sessionIdField\n})\n\nexport const listFilesOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tpaths: z.array(z.string()).describe('Absolute or workspace-relative file paths found'),\n\traw: z.unknown().optional().describe('Provider listing payload when available')\n})\n\nexport const removeFilesInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tpaths: z\n\t\t.array(z.string().min(1).max(MAX_FILE_PATH))\n\t\t.min(1)\n\t\t.max(MAX_READ_PATHS)\n\t\t.describe('Paths to remove under workspace'),\n\tsession_id: sessionIdField\n})\n\nexport const removeFilesOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tpaths: z.array(z.string()),\n\tok: z.literal(true)\n})\n\nexport const importArtifactInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tpath: filePathField,\n\tsource: sandboxObjectArtifactRefSchema.describe('Object-store ArtifactRef to copy into the sandbox'),\n\tsession_id: sessionIdField\n})\n\nexport const importArtifactOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tpath: z.string(),\n\tok: z.literal(true),\n\tbyte_length: z.number().int().nonnegative()\n})\n\nexport const exportArtifactInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tpath: filePathField,\n\tdestination_key: z.string().min(1).describe('Object key to write under bound storage'),\n\tsession_id: sessionIdField\n})\n\nexport const exportArtifactOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tpath: z.string(),\n\tartifact: sandboxObjectArtifactRefSchema\n})\n\nexport const createBridgeSessionOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tsession_id: z.string().describe('Bridge session id for Session-Id header')\n})\n\nexport const deleteBridgeSessionInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tsession_id: z.string().min(1).max(200).describe('Bridge session id to delete')\n})\n\nexport const deleteBridgeSessionOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tsession_id: z.string(),\n\tdeleted: z.literal(true)\n})\n\nexport const executeCodeInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tcode: z.string().min(1).max(MAX_ARG_CHARS).describe('Source code to run'),\n\tlanguage: z\n\t\t.enum(['python', 'javascript', 'typescript', 'shell'])\n\t\t.optional()\n\t\t.describe('Runtime language (default python)'),\n\ttimeout_ms: z\n\t\t.int()\n\t\t.min(1)\n\t\t.max(MAX_EXEC_TIMEOUT_MS)\n\t\t.optional()\n\t\t.describe(`Exec timeout in ms (default ${DEFAULT_EXEC_TIMEOUT_MS})`),\n\tsession_id: z\n\t\t.string()\n\t\t.min(1)\n\t\t.max(200)\n\t\t.optional()\n\t\t.describe('Optional bridge session id for isolated working directory and runtime state')\n})\n\n/**\n * Mount an S3-compatible bucket into the sandbox filesystem.\n * @see https://developers.cloudflare.com/sandbox/bridge/http-api/#bucket-mounts\n *\n * Two bridge modes:\n * - **R2 binding:** omit `endpoint`; `bucket` is the Worker R2 binding name.\n * - **Remote S3/R2/GCS:** set `endpoint` (+ optional credentials; bridge may use Worker secrets).\n */\nexport const mountBucketInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tbucket: z\n\t\t.string()\n\t\t.min(1)\n\t\t.max(256)\n\t\t.describe(\n\t\t\t'R2 Worker binding name when endpoint is omitted; otherwise the remote bucket name (e.g. for S3/R2 endpoint mounts)'\n\t\t),\n\tmount_path: z\n\t\t.string()\n\t\t.min(1)\n\t\t.max(MAX_FILE_PATH)\n\t\t.refine((p) => p.startsWith('/'), { message: 'mount_path must be an absolute path (start with /)' })\n\t\t.describe('Absolute path inside the sandbox to mount at (e.g. /data or /mnt/workspace)'),\n\tendpoint: z\n\t\t.url()\n\t\t.optional()\n\t\t.describe(\n\t\t\t'S3-compatible endpoint URL (e.g. https://s3.amazonaws.com or https://ACCOUNT.r2.cloudflarestorage.com). Omit for Worker R2 binding mounts'\n\t\t),\n\tprovider: z\n\t\t.enum(['r2', 's3', 'gcs'])\n\t\t.optional()\n\t\t.describe('Provider hint for s3fs optimizations when using endpoint mounts'),\n\tread_only: z.boolean().optional().describe('Mount read-only (default false)'),\n\tprefix: z\n\t\t.string()\n\t\t.min(1)\n\t\t.max(MAX_FILE_PATH)\n\t\t.optional()\n\t\t.describe('Bucket prefix/subdirectory to expose at the mount (must start with / when set)'),\n\taccess_key_id: z\n\t\t.string()\n\t\t.min(1)\n\t\t.optional()\n\t\t.describe('Access key for endpoint mounts (maps to bridge credentials.accessKeyId)'),\n\tsecret_access_key: z\n\t\t.string()\n\t\t.min(1)\n\t\t.optional()\n\t\t.describe('Secret key for endpoint mounts (maps to bridge credentials.secretAccessKey)'),\n\tcredential_proxy: z\n\t\t.boolean()\n\t\t.optional()\n\t\t.describe(\n\t\t\t'When true, bridge keeps credentials out of the container (egress signing). Endpoint mounts only; requires ContainerProxy on the bridge Worker'\n\t\t),\n\tlocal_bucket: z\n\t\t.boolean()\n\t\t.optional()\n\t\t.describe('When true, use local R2 binding sync (wrangler dev). Mutually exclusive with endpoint'),\n\ts3fs_options: z\n\t\t.array(z.string().min(1).max(256))\n\t\t.max(32)\n\t\t.optional()\n\t\t.describe('Advanced s3fs mount flags (e.g. use_cache=/tmp/cache)')\n})\n\nexport const mountBucketOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tbucket: z.string(),\n\tmount_path: z.string(),\n\tok: z.literal(true)\n})\n\nexport const unmountBucketInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tmount_path: z\n\t\t.string()\n\t\t.min(1)\n\t\t.max(MAX_FILE_PATH)\n\t\t.refine((p) => p.startsWith('/'), { message: 'mount_path must be an absolute path (start with /)' })\n\t\t.describe('Absolute mount path previously passed to mount')\n})\n\nexport const unmountBucketOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tmount_path: z.string(),\n\tok: z.literal(true)\n})\n\nexport type SandboxIdInput = z.infer<typeof sandboxIdInputSchema>\nexport type CreateSandboxOutput = z.infer<typeof createSandboxOutputSchema>\nexport type DestroySandboxOutput = z.infer<typeof destroySandboxOutputSchema>\nexport type RunningOutput = z.infer<typeof runningOutputSchema>\nexport type HealthOutput = z.infer<typeof healthOutputSchema>\nexport type ExecInput = z.infer<typeof execInputSchema>\nexport type ExecOutput = z.infer<typeof execOutputSchema>\nexport type WriteFileInput = z.infer<typeof writeFileInputSchema>\nexport type WriteFileOutput = z.infer<typeof writeFileOutputSchema>\nexport type ReadFileInput = z.infer<typeof readFileInputSchema>\nexport type ReadFileOutput = z.infer<typeof readFileOutputSchema>\nexport type WriteFilesInput = z.infer<typeof writeFilesInputSchema>\nexport type WriteFilesOutput = z.infer<typeof writeFilesOutputSchema>\nexport type ReadFilesInput = z.infer<typeof readFilesInputSchema>\nexport type ReadFilesOutput = z.infer<typeof readFilesOutputSchema>\nexport type ListFilesInput = z.infer<typeof listFilesInputSchema>\nexport type ListFilesOutput = z.infer<typeof listFilesOutputSchema>\nexport type RemoveFilesInput = z.infer<typeof removeFilesInputSchema>\nexport type RemoveFilesOutput = z.infer<typeof removeFilesOutputSchema>\nexport type ImportArtifactInput = z.infer<typeof importArtifactInputSchema>\nexport type ImportArtifactOutput = z.infer<typeof importArtifactOutputSchema>\nexport type ExportArtifactInput = z.infer<typeof exportArtifactInputSchema>\nexport type ExportArtifactOutput = z.infer<typeof exportArtifactOutputSchema>\nexport type CreateBridgeSessionOutput = z.infer<typeof createBridgeSessionOutputSchema>\nexport type DeleteBridgeSessionInput = z.infer<typeof deleteBridgeSessionInputSchema>\nexport type DeleteBridgeSessionOutput = z.infer<typeof deleteBridgeSessionOutputSchema>\nexport type ExecuteCodeInput = z.infer<typeof executeCodeInputSchema>\nexport type MountBucketInput = z.infer<typeof mountBucketInputSchema>\nexport type MountBucketOutput = z.infer<typeof mountBucketOutputSchema>\nexport type UnmountBucketInput = z.infer<typeof unmountBucketInputSchema>\nexport type UnmountBucketOutput = z.infer<typeof unmountBucketOutputSchema>\n","/**\n * Cloudflare Sandbox Bridge pure helpers (no HTTP).\n */\n\nimport { isPlainObject, isString } from 'es-toolkit'\n\nimport { ToolError } from '../../core/errors'\nimport { base64ToBytes, utf8ToBytes } from '../../shared/bytes'\nimport { MAX_FILE_BYTES } from './contracts'\n\n/** Normalize a host path to the bridge URL segment under /file/… (no leading slash). */\nexport function workspaceFileKey(path: string): string {\n\tconst trimmed = path.trim()\n\tif (!trimmed) {\n\t\tthrow new ToolError('File path is empty', { code: 'bad_input' })\n\t}\n\tconst noLead = trimmed.replace(/^\\/+/, '')\n\tconst under = noLead.startsWith('workspace/') ? noLead : `workspace/${noLead}`\n\t// Reject traversal\n\tconst parts = under.split('/')\n\tif (parts.some((p) => p === '..' || p === '')) {\n\t\tthrow new ToolError('File path must stay under workspace', {\n\t\t\tcode: 'bad_input',\n\t\t\tdetails: { path: trimmed }\n\t\t})\n\t}\n\treturn under\n}\n\n/** Absolute workspace path for shell list/rm (leading slash). */\nexport function workspaceAbsolutePath(path: string): string {\n\tconst key = workspaceFileKey(path)\n\treturn `/${key}`\n}\n\n/** Shell-safe single-quoted string. */\nexport function shellQuote(value: string): string {\n\treturn `'${value.replaceAll(\"'\", `'\\\\''`)}'`\n}\n\n/**\n * Resolve write-file body to raw bytes (text UTF-8 or base64).\n * Enforces MAX_FILE_BYTES (bridge limit).\n */\nexport function resolveWriteFileBytes(input: {\n\ttext?: string | undefined\n\tbody_base64?: string | undefined\n}): Uint8Array {\n\tif (input.body_base64 !== undefined && input.text !== undefined) {\n\t\tthrow new ToolError('Provide exactly one of text or body_base64', { code: 'bad_input' })\n\t}\n\tif (input.body_base64 !== undefined) {\n\t\tconst bytes = base64ToBytes(input.body_base64)\n\t\tif (bytes.byteLength > MAX_FILE_BYTES) {\n\t\t\tthrow new ToolError('Sandbox file exceeds max byte limit', {\n\t\t\t\tcode: 'too_large',\n\t\t\t\tdetails: { max_bytes: MAX_FILE_BYTES, content_length: bytes.byteLength }\n\t\t\t})\n\t\t}\n\t\treturn bytes\n\t}\n\tif (input.text !== undefined) {\n\t\tconst bytes = utf8ToBytes(input.text)\n\t\tif (bytes.byteLength > MAX_FILE_BYTES) {\n\t\t\tthrow new ToolError('Sandbox file exceeds max byte limit', {\n\t\t\t\tcode: 'too_large',\n\t\t\t\tdetails: { max_bytes: MAX_FILE_BYTES, content_length: bytes.byteLength }\n\t\t\t})\n\t\t}\n\t\treturn bytes\n\t}\n\tthrow new ToolError('Provide exactly one of text or body_base64', { code: 'bad_input' })\n}\n\nexport type ParsedExecStream = {\n\tstdout: string\n\tstderr: string\n\texit_code?: number\n\terror?: string\n\terror_code?: string\n}\n\nexport type ParseExecSseOptions = {\n\t/** Called for each stdout chunk as the SSE body is walked (buffer may still be complete). */\n\tonStdout?: (chunk: string) => void\n\t/** Called for each stderr chunk as the SSE body is walked. */\n\tonStderr?: (chunk: string) => void\n}\n\n/**\n * Parse bridge /exec text/event-stream body.\n * Events: stdout/stderr (base64 data), exit ({\"exit_code\":N}), error ({\"error\",\"code\"}).\n */\nexport function parseExecSse(body: string, options: ParseExecSseOptions = {}): ParsedExecStream {\n\tconst stdoutChunks: string[] = []\n\tconst stderrChunks: string[] = []\n\tlet exit_code: number | undefined\n\tlet error: string | undefined\n\tlet error_code: string | undefined\n\n\tconst blocks = body.replaceAll('\\r\\n', '\\n').split('\\n\\n')\n\tfor (const block of blocks) {\n\t\tconst lines = block.split('\\n').filter((line) => line.length > 0)\n\t\tif (lines.length === 0) continue\n\t\tlet event = 'message'\n\t\tconst dataLines: string[] = []\n\t\tfor (const line of lines) {\n\t\t\tif (line.startsWith('event:')) {\n\t\t\t\tevent = line.slice(6).trim()\n\t\t\t} else if (line.startsWith('data:')) {\n\t\t\t\tdataLines.push(line.slice(5).trimStart())\n\t\t\t}\n\t\t}\n\t\tconst data = dataLines.join('\\n')\n\t\tif (event === 'stdout' && data.length > 0) {\n\t\t\tconst chunk = decodeBase64Chunk(data)\n\t\t\tstdoutChunks.push(chunk)\n\t\t\toptions.onStdout?.(chunk)\n\t\t} else if (event === 'stderr' && data.length > 0) {\n\t\t\tconst chunk = decodeBase64Chunk(data)\n\t\t\tstderrChunks.push(chunk)\n\t\t\toptions.onStderr?.(chunk)\n\t\t} else if (event === 'exit' && data.length > 0) {\n\t\t\tconst parsed = safeJson(data)\n\t\t\tif (isPlainObject(parsed)) {\n\t\t\t\tconst code = parsed['exit_code']\n\t\t\t\tif (typeof code === 'number' && Number.isFinite(code)) exit_code = code\n\t\t\t}\n\t\t} else if (event === 'error' && data.length > 0) {\n\t\t\tconst parsed = safeJson(data)\n\t\t\tif (isPlainObject(parsed)) {\n\t\t\t\tif (isString(parsed['error'])) error = parsed['error']\n\t\t\t\tif (isString(parsed['code'])) error_code = parsed['code']\n\t\t\t} else {\n\t\t\t\terror = data\n\t\t\t}\n\t\t}\n\t}\n\n\tconst out: ParsedExecStream = {\n\t\tstdout: stdoutChunks.join(''),\n\t\tstderr: stderrChunks.join('')\n\t}\n\tif (exit_code !== undefined) out.exit_code = exit_code\n\tif (error !== undefined) out.error = error\n\tif (error_code !== undefined) out.error_code = error_code\n\treturn out\n}\n\nfunction decodeBase64Chunk(data: string): string {\n\ttry {\n\t\t// Bun/Node Buffer or atob\n\t\tif (typeof Buffer !== 'undefined') {\n\t\t\treturn Buffer.from(data, 'base64').toString('utf8')\n\t\t}\n\t\tconst binary = atob(data)\n\t\tconst bytes = new Uint8Array(binary.length)\n\t\tfor (let i = 0; i < binary.length; i += 1) bytes[i] = binary.charCodeAt(i)\n\t\treturn new TextDecoder().decode(bytes)\n\t} catch {\n\t\treturn data\n\t}\n}\n\nfunction safeJson(text: string): unknown {\n\ttry {\n\t\tconst value: unknown = JSON.parse(text)\n\t\treturn value\n\t} catch {\n\t\treturn undefined\n\t}\n}\n\n/** Build argv for executeCode over the bridge (no native runCode route). */\nexport function executeCodeArgv(language: string, code: string): string[] {\n\tswitch (language) {\n\t\tcase 'javascript':\n\t\tcase 'typescript':\n\t\t\treturn ['node', '-e', code]\n\t\tcase 'shell':\n\t\t\treturn ['sh', '-lc', code]\n\t\tcase 'python':\n\t\tdefault:\n\t\t\treturn ['python3', '-c', code]\n\t}\n}\n","/**\n * Cloudflare Sandbox Bridge vendor client (HttpService + Bearer).\n * Host: `new CloudflareSandboxClient(auth)`. Agent: `fromContext(ctx)`.\n * Gold: `src/vendors/resend/client.ts` + messaging ArtifactRef storage pattern.\n * @see https://developers.cloudflare.com/sandbox/bridge/http-api/\n */\n\nimport { isPlainObject, isString, trimEnd } from 'es-toolkit'\n\nimport { ToolError } from '../../core/errors'\nimport { requireAuth } from '../../core/provider'\nimport type { ToolContext } from '../../core/types'\nimport { bytesToBase64, bytesToUtf8, toArrayBuffer } from '../../shared/bytes'\nimport { HttpService } from '../../transport/http-service'\nimport type { HttpServiceOptions } from '../../transport/http-service'\nimport { S3Client } from '../s3'\nimport type {\n\tCloudflareSandboxAuth,\n\tCreateBridgeSessionOutput,\n\tCreateSandboxOutput,\n\tDeleteBridgeSessionInput,\n\tDeleteBridgeSessionOutput,\n\tDestroySandboxOutput,\n\tExecInput,\n\tExecOutput,\n\tExecuteCodeInput,\n\tExportArtifactInput,\n\tExportArtifactOutput,\n\tHealthOutput,\n\tImportArtifactInput,\n\tImportArtifactOutput,\n\tListFilesInput,\n\tListFilesOutput,\n\tMountBucketInput,\n\tMountBucketOutput,\n\tReadFileInput,\n\tReadFileOutput,\n\tReadFilesInput,\n\tReadFilesOutput,\n\tRemoveFilesInput,\n\tRemoveFilesOutput,\n\tRunningOutput,\n\tSandboxIdInput,\n\tUnmountBucketInput,\n\tUnmountBucketOutput,\n\tWriteFileInput,\n\tWriteFileOutput,\n\tWriteFilesInput,\n\tWriteFilesOutput\n} from './contracts'\nimport {\n\tDEFAULT_EXEC_TIMEOUT_MS,\n\tMAX_FILE_BYTES,\n\tMAX_LIST_FILES,\n\tcloudflareSandboxAuthSchema,\n\tmountBucketInputSchema,\n\tunmountBucketInputSchema\n} from './contracts'\nimport {\n\texecuteCodeArgv,\n\tparseExecSse,\n\tresolveWriteFileBytes,\n\tshellQuote,\n\tworkspaceAbsolutePath,\n\tworkspaceFileKey\n} from './domain'\n\nexport type CloudflareSandboxClientOptions = Pick<HttpServiceOptions, 'fetch' | 'signal'>\n\nexport class CloudflareSandboxClient {\n\treadonly #http: HttpService\n\treadonly #storage: S3Client | undefined\n\t/** Optional S3 auth fields for endpoint mount credential fallback (Mastra workspace FS). */\n\treadonly #storageAuth:\n\t\t| {\n\t\t\t\taccess_key_id: string\n\t\t\t\tsecret_access_key: string\n\t\t\t\tendpoint?: string | undefined\n\t\t }\n\t\t| undefined\n\n\tconstructor(auth: CloudflareSandboxAuth, options: CloudflareSandboxClientOptions = {}) {\n\t\tconst parsed = cloudflareSandboxAuthSchema.safeParse(auth)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid Cloudflare Sandbox auth credentials', {\n\t\t\t\tcode: 'bad_auth',\n\t\t\t\tdetails: { issues: parsed.error.issues.map((issue) => issue.message) }\n\t\t\t})\n\t\t}\n\t\tthis.#http = new HttpService({\n\t\t\tbaseURL: trimEnd(parsed.data.base_url, '/'),\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${parsed.data.api_key}`\n\t\t\t},\n\t\t\ttimeout: 120_000,\n\t\t\tlabel: 'Cloudflare Sandbox',\n\t\t\t...(options.fetch && { fetch: options.fetch }),\n\t\t\t...(options.signal && { signal: options.signal })\n\t\t})\n\t\tthis.#storage = parsed.data.storage\n\t\t\t? new S3Client(parsed.data.storage, {\n\t\t\t\t\t...(options.fetch && { fetch: options.fetch }),\n\t\t\t\t\t...(options.signal && { signal: options.signal })\n\t\t\t\t})\n\t\t\t: undefined\n\t\tthis.#storageAuth = parsed.data.storage\n\t\t\t? {\n\t\t\t\t\taccess_key_id: parsed.data.storage.access_key_id,\n\t\t\t\t\tsecret_access_key: parsed.data.storage.secret_access_key,\n\t\t\t\t\t...(parsed.data.storage.endpoint && { endpoint: parsed.data.storage.endpoint })\n\t\t\t\t}\n\t\t\t: undefined\n\t}\n\n\tstatic fromContext(ctx: ToolContext): CloudflareSandboxClient {\n\t\treturn new CloudflareSandboxClient(requireAuth(ctx, cloudflareSandboxAuthSchema), {\n\t\t\t...(ctx.fetch && { fetch: ctx.fetch }),\n\t\t\t...(ctx.signal && { signal: ctx.signal })\n\t\t})\n\t}\n\n\t/** Liveness probe on the bridge. */\n\tasync health(): Promise<HealthOutput> {\n\t\tconst { data } = await this.#http.get('/health', {\n\t\t\tlabel: 'Cloudflare Sandbox health'\n\t\t})\n\t\tif (isPlainObject(data) && data['ok'] === true) return { ok: true }\n\t\tif (isPlainObject(data) && data['ok'] === false) return { ok: false }\n\t\treturn { ok: true }\n\t}\n\n\tasync create(): Promise<CreateSandboxOutput> {\n\t\tconst { data } = await this.#http.post('/v1/sandbox', undefined, {\n\t\t\tlabel: 'Cloudflare Sandbox create'\n\t\t})\n\t\tif (!isPlainObject(data) || !isString(data['id'])) {\n\t\t\tthrow new ToolError('Unexpected create sandbox response', { code: 'upstream' })\n\t\t}\n\t\treturn { sandbox_id: data['id'] }\n\t}\n\n\tasync destroy(input: SandboxIdInput): Promise<DestroySandboxOutput> {\n\t\tawait this.#http.delete(`/v1/sandbox/${encodeURIComponent(input.sandbox_id)}`, {\n\t\t\tlabel: 'Cloudflare Sandbox destroy'\n\t\t})\n\t\treturn { sandbox_id: input.sandbox_id, destroyed: true }\n\t}\n\n\tasync running(input: SandboxIdInput): Promise<RunningOutput> {\n\t\tconst { data } = await this.#http.get(`/v1/sandbox/${encodeURIComponent(input.sandbox_id)}/running`, {\n\t\t\tlabel: 'Cloudflare Sandbox running'\n\t\t})\n\t\tif (!isPlainObject(data) || typeof data['running'] !== 'boolean') {\n\t\t\tthrow new ToolError('Unexpected running response', { code: 'upstream' })\n\t\t}\n\t\treturn { sandbox_id: input.sandbox_id, running: data['running'] }\n\t}\n\n\t/**\n\t * Run a command. Bridge returns text/event-stream (stdout/stderr base64 + exit).\n\t * Uses HttpService.bytes so ofetch does not try to JSON-parse the SSE body.\n\t * Optional onStdout/onStderr fire while walking the buffered SSE (not true wire streaming).\n\t */\n\tasync exec(\n\t\tinput: ExecInput,\n\t\tstream: { onStdout?: (chunk: string) => void; onStderr?: (chunk: string) => void } = {}\n\t): Promise<ExecOutput> {\n\t\tconst body: Record<string, unknown> = {\n\t\t\targv: input.argv,\n\t\t\ttimeout_ms: input.timeout_ms ?? DEFAULT_EXEC_TIMEOUT_MS\n\t\t}\n\t\tif (input.cwd) body['cwd'] = input.cwd\n\t\tif (input.env && Object.keys(input.env).length > 0) body['env'] = input.env\n\n\t\tconst headers: Record<string, string> = {\n\t\t\t'Content-Type': 'application/json',\n\t\t\tAccept: 'text/event-stream'\n\t\t}\n\t\tif (input.session_id) headers['Session-Id'] = input.session_id\n\n\t\tconst { bytes } = await this.#http.bytes('POST', `/v1/sandbox/${encodeURIComponent(input.sandbox_id)}/exec`, {\n\t\t\tbody,\n\t\t\theaders,\n\t\t\tlabel: 'Cloudflare Sandbox exec'\n\t\t})\n\t\tconst text = new TextDecoder().decode(bytes)\n\t\tconst parsed = parseExecSse(text, {\n\t\t\t...(stream.onStdout && { onStdout: stream.onStdout }),\n\t\t\t...(stream.onStderr && { onStderr: stream.onStderr })\n\t\t})\n\t\tif (parsed.error && parsed.exit_code === undefined) {\n\t\t\tthrow new ToolError(parsed.error, {\n\t\t\t\tcode: 'upstream',\n\t\t\t\tdetails: {\n\t\t\t\t\t...(parsed.error_code && { error_code: parsed.error_code }),\n\t\t\t\t\tsandbox_id: input.sandbox_id\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\tconst exit_code = parsed.exit_code ?? (parsed.error ? 1 : 0)\n\t\tconst out: ExecOutput = {\n\t\t\tsandbox_id: input.sandbox_id,\n\t\t\tstdout: parsed.stdout,\n\t\t\tstderr: parsed.stderr,\n\t\t\texit_code,\n\t\t\tsuccess: exit_code === 0\n\t\t}\n\t\tif (parsed.error) out.error = parsed.error\n\t\tif (parsed.error_code) out.error_code = parsed.error_code\n\t\treturn out\n\t}\n\n\t/** Execute source via python3/node/sh on the bridge (no native runCode route). */\n\tasync executeCode(input: ExecuteCodeInput): Promise<ExecOutput> {\n\t\tconst language = input.language ?? 'python'\n\t\treturn this.exec({\n\t\t\tsandbox_id: input.sandbox_id,\n\t\t\targv: executeCodeArgv(language, input.code),\n\t\t\t...(input.timeout_ms !== undefined && { timeout_ms: input.timeout_ms }),\n\t\t\t...(input.session_id && { session_id: input.session_id })\n\t\t})\n\t}\n\n\tasync writeFile(input: WriteFileInput): Promise<WriteFileOutput> {\n\t\tconst bytes = resolveWriteFileBytes(input)\n\t\tawait this.#putFileBytes(input.sandbox_id, input.path, bytes, input.session_id)\n\t\treturn {\n\t\t\tsandbox_id: input.sandbox_id,\n\t\t\tpath: input.path,\n\t\t\tok: true,\n\t\t\tbyte_length: bytes.byteLength\n\t\t}\n\t}\n\n\tasync readFile(input: ReadFileInput): Promise<ReadFileOutput> {\n\t\tconst bytes = await this.#getFileBytes(input.sandbox_id, input.path, input.session_id)\n\t\tconst encoding = input.encoding ?? 'utf8'\n\t\tconst out: ReadFileOutput = {\n\t\t\tsandbox_id: input.sandbox_id,\n\t\t\tpath: input.path,\n\t\t\tbyte_length: bytes.byteLength\n\t\t}\n\t\tif (encoding === 'base64') {\n\t\t\tout.body_base64 = bytesToBase64(bytes)\n\t\t} else {\n\t\t\tout.text = bytesToUtf8(bytes)\n\t\t}\n\t\treturn out\n\t}\n\n\tasync writeFiles(input: WriteFilesInput): Promise<WriteFilesOutput> {\n\t\tconst paths: string[] = []\n\t\tfor (const file of input.files) {\n\t\t\tawait this.writeFile({\n\t\t\t\tsandbox_id: input.sandbox_id,\n\t\t\t\tpath: file.path,\n\t\t\t\t...(file.text !== undefined && { text: file.text }),\n\t\t\t\t...(file.body_base64 !== undefined && { body_base64: file.body_base64 }),\n\t\t\t\t...(input.session_id && { session_id: input.session_id })\n\t\t\t})\n\t\t\tpaths.push(file.path)\n\t\t}\n\t\treturn { sandbox_id: input.sandbox_id, paths, ok: true }\n\t}\n\n\tasync readFiles(input: ReadFilesInput): Promise<ReadFilesOutput> {\n\t\tconst files: ReadFilesOutput['files'] = []\n\t\tfor (const path of input.paths) {\n\t\t\tconst row = await this.readFile({\n\t\t\t\tsandbox_id: input.sandbox_id,\n\t\t\t\tpath,\n\t\t\t\t...(input.encoding && { encoding: input.encoding }),\n\t\t\t\t...(input.session_id && { session_id: input.session_id })\n\t\t\t})\n\t\t\tfiles.push({\n\t\t\t\tpath: row.path,\n\t\t\t\t...(row.text !== undefined && { text: row.text }),\n\t\t\t\t...(row.body_base64 !== undefined && { body_base64: row.body_base64 }),\n\t\t\t\t...(row.byte_length !== undefined && { byte_length: row.byte_length })\n\t\t\t})\n\t\t}\n\t\treturn { sandbox_id: input.sandbox_id, files }\n\t}\n\n\t/** List files via find in the workspace (bridge has no list route). */\n\tasync listFiles(input: ListFilesInput): Promise<ListFilesOutput> {\n\t\tconst dir = input.directory_path?.trim() || '/workspace'\n\t\tconst abs = dir.startsWith('/') ? dir : workspaceAbsolutePath(dir)\n\t\tconst out = await this.exec({\n\t\t\tsandbox_id: input.sandbox_id,\n\t\t\targv: ['sh', '-lc', `find ${shellQuote(abs)} -maxdepth 4 -type f 2>/dev/null | head -n ${MAX_LIST_FILES}`],\n\t\t\t...(input.session_id && { session_id: input.session_id })\n\t\t})\n\t\tconst paths = out.stdout\n\t\t\t.split('\\n')\n\t\t\t.map((line) => line.trim())\n\t\t\t.filter((line) => line.length > 0)\n\t\treturn {\n\t\t\tsandbox_id: input.sandbox_id,\n\t\t\tpaths,\n\t\t\traw: { stdout: out.stdout, stderr: out.stderr, exit_code: out.exit_code }\n\t\t}\n\t}\n\n\t/** Remove files via rm (bridge has no delete-file route). */\n\tasync removeFiles(input: RemoveFilesInput): Promise<RemoveFilesOutput> {\n\t\tfor (const path of input.paths) {\n\t\t\tconst abs = path.startsWith('/') ? path : workspaceAbsolutePath(path)\n\t\t\tawait this.exec({\n\t\t\t\tsandbox_id: input.sandbox_id,\n\t\t\t\targv: ['rm', '-f', '--', abs],\n\t\t\t\t...(input.session_id && { session_id: input.session_id })\n\t\t\t})\n\t\t}\n\t\treturn { sandbox_id: input.sandbox_id, paths: input.paths, ok: true }\n\t}\n\n\t/**\n\t * Copy an object-store ArtifactRef into the sandbox workspace.\n\t * Requires auth.storage.\n\t */\n\tasync importArtifact(input: ImportArtifactInput): Promise<ImportArtifactOutput> {\n\t\tconst storage = this.#requireStorage('importArtifact')\n\t\tif (input.source.store !== 'object') {\n\t\t\tthrow new ToolError('Sandbox importArtifact only supports store=object ArtifactRefs', {\n\t\t\t\tcode: 'bad_input'\n\t\t\t})\n\t\t}\n\t\tconst bytes = await storage.getBytes(input.source.key, { maxBytes: MAX_FILE_BYTES })\n\t\tawait this.#putFileBytes(input.sandbox_id, input.path, bytes, input.session_id)\n\t\treturn {\n\t\t\tsandbox_id: input.sandbox_id,\n\t\t\tpath: input.path,\n\t\t\tok: true,\n\t\t\tbyte_length: bytes.byteLength\n\t\t}\n\t}\n\n\t/**\n\t * Copy a sandbox workspace file to object storage and return an ArtifactRef.\n\t * Requires auth.storage.\n\t */\n\tasync exportArtifact(input: ExportArtifactInput): Promise<ExportArtifactOutput> {\n\t\tconst storage = this.#requireStorage('exportArtifact')\n\t\tconst bytes = await this.#getFileBytes(input.sandbox_id, input.path, input.session_id)\n\t\tawait storage.putBytes(input.destination_key, bytes)\n\t\treturn {\n\t\t\tsandbox_id: input.sandbox_id,\n\t\t\tpath: input.path,\n\t\t\tartifact: {\n\t\t\t\tstore: 'object',\n\t\t\t\tkey: input.destination_key,\n\t\t\t\tbyte_length: bytes.byteLength\n\t\t\t}\n\t\t}\n\t}\n\n\tasync createSession(input: SandboxIdInput): Promise<CreateBridgeSessionOutput> {\n\t\tconst { data } = await this.#http.post(`/v1/sandbox/${encodeURIComponent(input.sandbox_id)}/session`, undefined, {\n\t\t\tlabel: 'Cloudflare Sandbox createSession'\n\t\t})\n\t\tif (!isPlainObject(data) || !isString(data['id'])) {\n\t\t\tthrow new ToolError('Unexpected create session response', { code: 'upstream' })\n\t\t}\n\t\treturn { sandbox_id: input.sandbox_id, session_id: data['id'] }\n\t}\n\n\tasync deleteSession(input: DeleteBridgeSessionInput): Promise<DeleteBridgeSessionOutput> {\n\t\tawait this.#http.delete(\n\t\t\t`/v1/sandbox/${encodeURIComponent(input.sandbox_id)}/session/${encodeURIComponent(input.session_id)}`,\n\t\t\t{ label: 'Cloudflare Sandbox deleteSession' }\n\t\t)\n\t\treturn { sandbox_id: input.sandbox_id, session_id: input.session_id, deleted: true }\n\t}\n\n\t/**\n\t * Mount an S3-compatible bucket (or Worker R2 binding) at an absolute path in the sandbox.\n\t * Bridge: `POST /v1/sandbox/:id/mount`.\n\t * For Mastra / host workspace S3 FS: pass `endpoint` + credentials (or rely on auth.storage).\n\t * @see https://developers.cloudflare.com/sandbox/bridge/http-api/#bucket-mounts\n\t */\n\tasync mount(input: MountBucketInput): Promise<MountBucketOutput> {\n\t\tconst parsed = mountBucketInputSchema.safeParse(input)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid sandbox mount input', {\n\t\t\t\tcode: 'bad_input',\n\t\t\t\tdetails: { issues: parsed.error.issues.map((issue) => issue.message) }\n\t\t\t})\n\t\t}\n\t\tconst data = parsed.data\n\t\tif (data.local_bucket && data.endpoint) {\n\t\t\tthrow new ToolError('local_bucket and endpoint are mutually exclusive on mount', { code: 'bad_input' })\n\t\t}\n\t\tif (data.prefix !== undefined && !data.prefix.startsWith('/')) {\n\t\t\tthrow new ToolError('mount prefix must start with /', { code: 'bad_input' })\n\t\t}\n\n\t\t// Endpoint mounts only: omit endpoint for Worker R2 binding mounts.\n\t\tconst endpoint = data.local_bucket ? undefined : data.endpoint\n\t\t// Credentials: explicit input, else auth.storage when doing an endpoint mount (Mastra S3 FS).\n\t\tconst accessKeyId = data.access_key_id ?? (endpoint !== undefined ? this.#storageAuth?.access_key_id : undefined)\n\t\tconst secretAccessKey =\n\t\t\tdata.secret_access_key ?? (endpoint !== undefined ? this.#storageAuth?.secret_access_key : undefined)\n\n\t\tconst options: Record<string, unknown> = {}\n\t\tif (endpoint) options['endpoint'] = endpoint\n\t\tif (data.provider) options['provider'] = data.provider\n\t\tif (data.read_only !== undefined) options['readOnly'] = data.read_only\n\t\tif (data.prefix) options['prefix'] = data.prefix\n\t\tif (data.credential_proxy !== undefined) options['credentialProxy'] = data.credential_proxy\n\t\tif (data.local_bucket) options['localBucket'] = true\n\t\tif (data.s3fs_options && data.s3fs_options.length > 0) options['s3fsOptions'] = data.s3fs_options\n\t\tif (endpoint && accessKeyId && secretAccessKey) {\n\t\t\toptions['credentials'] = {\n\t\t\t\taccessKeyId,\n\t\t\t\tsecretAccessKey\n\t\t\t}\n\t\t}\n\n\t\tconst body: Record<string, unknown> = {\n\t\t\tbucket: data.bucket,\n\t\t\tmountPath: data.mount_path\n\t\t}\n\t\tif (Object.keys(options).length > 0) body['options'] = options\n\n\t\tawait this.#http.post(`/v1/sandbox/${encodeURIComponent(data.sandbox_id)}/mount`, body, {\n\t\t\tlabel: 'Cloudflare Sandbox mount'\n\t\t})\n\t\treturn {\n\t\t\tsandbox_id: data.sandbox_id,\n\t\t\tbucket: data.bucket,\n\t\t\tmount_path: data.mount_path,\n\t\t\tok: true\n\t\t}\n\t}\n\n\t/**\n\t * Unmount a previously mounted bucket path.\n\t * Bridge: `POST /v1/sandbox/:id/unmount` with `{ mountPath }`.\n\t * Mounts are also cleared when the sandbox is destroyed.\n\t */\n\tasync unmount(input: UnmountBucketInput): Promise<UnmountBucketOutput> {\n\t\tconst parsed = unmountBucketInputSchema.safeParse(input)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid sandbox unmount input', {\n\t\t\t\tcode: 'bad_input',\n\t\t\t\tdetails: { issues: parsed.error.issues.map((issue) => issue.message) }\n\t\t\t})\n\t\t}\n\t\tconst data = parsed.data\n\t\tawait this.#http.post(\n\t\t\t`/v1/sandbox/${encodeURIComponent(data.sandbox_id)}/unmount`,\n\t\t\t{ mountPath: data.mount_path },\n\t\t\t{ label: 'Cloudflare Sandbox unmount' }\n\t\t)\n\t\treturn {\n\t\t\tsandbox_id: data.sandbox_id,\n\t\t\tmount_path: data.mount_path,\n\t\t\tok: true\n\t\t}\n\t}\n\n\t#requireStorage(op: string): S3Client {\n\t\tif (!this.#storage) {\n\t\t\tthrow new ToolError(`${op} requires storage credentials on sandbox auth`, {\n\t\t\t\tcode: 'bad_auth'\n\t\t\t})\n\t\t}\n\t\treturn this.#storage\n\t}\n\n\tasync #putFileBytes(\n\t\tsandboxId: string,\n\t\tpath: string,\n\t\tbytes: Uint8Array,\n\t\tsessionId: string | undefined\n\t): Promise<void> {\n\t\tconst key = workspaceFileKey(path)\n\t\tconst headers: Record<string, string> = {\n\t\t\t'Content-Type': 'application/octet-stream'\n\t\t}\n\t\tif (sessionId) headers['Session-Id'] = sessionId\n\t\tconst { data } = await this.#http.put(\n\t\t\t`/v1/sandbox/${encodeURIComponent(sandboxId)}/file/${key.split('/').map(encodeURIComponent).join('/')}`,\n\t\t\ttoArrayBuffer(bytes),\n\t\t\t{ headers, label: 'Cloudflare Sandbox writeFile' }\n\t\t)\n\t\tif (isPlainObject(data) && data['ok'] === false) {\n\t\t\tthrow new ToolError('Sandbox writeFile failed', { code: 'upstream' })\n\t\t}\n\t}\n\n\tasync #getFileBytes(sandboxId: string, path: string, sessionId: string | undefined): Promise<Uint8Array> {\n\t\tconst key = workspaceFileKey(path)\n\t\tconst headers: Record<string, string> = {}\n\t\tif (sessionId) headers['Session-Id'] = sessionId\n\t\tconst { bytes } = await this.#http.bytes(\n\t\t\t'GET',\n\t\t\t`/v1/sandbox/${encodeURIComponent(sandboxId)}/file/${key.split('/').map(encodeURIComponent).join('/')}`,\n\t\t\t{ headers, label: 'Cloudflare Sandbox readFile', maxBytes: MAX_FILE_BYTES }\n\t\t)\n\t\treturn bytes\n\t}\n}\n","import { z } from 'zod'\n\nimport { defineModule, defineTool } from '../../core/define'\nimport { CloudflareSandboxClient } from './client'\nimport {\n\tcloudflareSandboxAuthSchema,\n\tcreateBridgeSessionOutputSchema,\n\tcreateSandboxOutputSchema,\n\tdeleteBridgeSessionInputSchema,\n\tdeleteBridgeSessionOutputSchema,\n\tdestroySandboxOutputSchema,\n\texecInputSchema,\n\texecOutputSchema,\n\texecuteCodeInputSchema,\n\texportArtifactInputSchema,\n\texportArtifactOutputSchema,\n\thealthOutputSchema,\n\timportArtifactInputSchema,\n\timportArtifactOutputSchema,\n\tlistFilesInputSchema,\n\tlistFilesOutputSchema,\n\treadFileInputSchema,\n\treadFileOutputSchema,\n\treadFilesInputSchema,\n\treadFilesOutputSchema,\n\tremoveFilesInputSchema,\n\tremoveFilesOutputSchema,\n\trunningOutputSchema,\n\tsandboxIdInputSchema,\n\twriteFileInputSchema,\n\twriteFileOutputSchema,\n\twriteFilesInputSchema,\n\twriteFilesOutputSchema\n} from './contracts'\n\nconst id = 'cloudflare-sandbox'\nconst emptyInputSchema = z.object({})\n\nexport const cloudflareSandboxHealthTool = defineTool({\n\tid: `${id}-health`,\n\tname: 'cloudflareSandboxHealth',\n\tdescription:\n\t\t'Check whether the Cloudflare Sandbox bridge is reachable. Use only for explicit availability diagnostics; ordinary sandbox work should begin with cloudflare-sandbox-create.',\n\tinputSchema: emptyInputSchema,\n\toutputSchema: healthOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (_input, ctx) => CloudflareSandboxClient.fromContext(ctx).health()\n})\n\nexport const cloudflareSandboxCreateTool = defineTool({\n\tid: `${id}-create`,\n\tname: 'cloudflareSandboxCreate',\n\tdescription:\n\t\t'Create an isolated Cloudflare sandbox and return sandbox_id. Use only when arbitrary code, commands, or temporary files are required and no purpose-built tool covers the task. Do not create a sandbox to build or edit supported deliverables.',\n\tinputSchema: emptyInputSchema,\n\toutputSchema: createSandboxOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (_input, ctx) => CloudflareSandboxClient.fromContext(ctx).create()\n})\n\nexport const cloudflareSandboxDestroyTool = defineTool({\n\tid: `${id}-destroy`,\n\tname: 'cloudflareSandboxDestroy',\n\tdescription:\n\t\t'Destroy a Cloudflare sandbox by sandbox_id and release its temporary files and resources. Call after the sandbox workflow is complete and any required output file has been exported.',\n\tinputSchema: sandboxIdInputSchema,\n\toutputSchema: destroySandboxOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).destroy(input)\n})\n\nexport const cloudflareSandboxRunningTool = defineTool({\n\tid: `${id}-running`,\n\tname: 'cloudflareSandboxRunning',\n\tdescription:\n\t\t'Check whether a Cloudflare sandbox is currently running. Use before continuing work on an existing sandbox_id; this does not execute code or inspect files.',\n\tinputSchema: sandboxIdInputSchema,\n\toutputSchema: runningOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).running(input)\n})\n\nexport const cloudflareSandboxExecTool = defineTool({\n\tid: `${id}-exec`,\n\tname: 'cloudflareSandboxExec',\n\tdescription:\n\t\t'One-shot argv exec in a Cloudflare sandbox (stdout/stderr/exit_code). Prefer a host workspace agent for multi-step shell; use tools for workflow one-shots. Optional env when the bridge supports it.',\n\tinputSchema: execInputSchema,\n\toutputSchema: execOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\ttags: ['exec', 'one-shot', 'compute'],\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).exec(input)\n})\n\nexport const cloudflareSandboxExecuteCodeTool = defineTool({\n\tid: `${id}-execute-code`,\n\tname: 'cloudflareSandboxExecuteCode',\n\tdescription:\n\t\t'Execute Python, JavaScript, or shell source in a Cloudflare sandbox. Use as a fallback for computation or automation with no dedicated tool. Do not generate or edit supported documents, spreadsheets, presentations, PDFs, or images here when a purpose-built tool is available.',\n\tinputSchema: executeCodeInputSchema,\n\toutputSchema: execOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).executeCode(input)\n})\n\nexport const cloudflareSandboxWriteFileTool = defineTool({\n\tid: `${id}-write-file`,\n\tname: 'cloudflareSandboxWriteFile',\n\tdescription:\n\t\t'Write one temporary file under the Cloudflare sandbox workspace from UTF-8 text or base64 bytes, up to 32 MiB decoded. Use for sandbox intermediates. This is not durable delivery; export a genuinely sandbox-produced final file with cloudflare-sandbox-export-artifact.',\n\tinputSchema: writeFileInputSchema,\n\toutputSchema: writeFileOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).writeFile(input)\n})\n\nexport const cloudflareSandboxReadFileTool = defineTool({\n\tid: `${id}-read-file`,\n\tname: 'cloudflareSandboxReadFile',\n\tdescription:\n\t\t'Read one temporary file from the Cloudflare sandbox workspace as UTF-8 or base64. Use for sandbox intermediates; use format-aware readers for supported ArtifactRefs.',\n\tinputSchema: readFileInputSchema,\n\toutputSchema: readFileOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).readFile(input)\n})\n\nexport const cloudflareSandboxWriteFilesTool = defineTool({\n\tid: `${id}-write-files`,\n\tname: 'cloudflareSandboxWriteFiles',\n\tdescription:\n\t\t'Write multiple temporary files under the Cloudflare sandbox workspace from text or base64. Use for sandbox intermediates, not final document generation. Export only a final file that the sandbox genuinely had to produce.',\n\tinputSchema: writeFilesInputSchema,\n\toutputSchema: writeFilesOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).writeFiles(input)\n})\n\nexport const cloudflareSandboxReadFilesTool = defineTool({\n\tid: `${id}-read-files`,\n\tname: 'cloudflareSandboxReadFiles',\n\tdescription:\n\t\t'Read multiple temporary files from the Cloudflare sandbox workspace as UTF-8 or base64. Use only within an active sandbox workflow; use format-aware readers for supported ArtifactRefs.',\n\tinputSchema: readFilesInputSchema,\n\toutputSchema: readFilesOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).readFiles(input)\n})\n\nexport const cloudflareSandboxListFilesTool = defineTool({\n\tid: `${id}-list-files`,\n\tname: 'cloudflareSandboxListFiles',\n\tdescription:\n\t\t'List temporary files under a Cloudflare sandbox directory, defaulting to /workspace. Use to locate sandbox intermediates, not durable workspace files or ArtifactRefs.',\n\tinputSchema: listFilesInputSchema,\n\toutputSchema: listFilesOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).listFiles(input)\n})\n\nexport const cloudflareSandboxRemoveFilesTool = defineTool({\n\tid: `${id}-remove-files`,\n\tname: 'cloudflareSandboxRemoveFiles',\n\tdescription:\n\t\t'Remove temporary files from the Cloudflare sandbox workspace by path. Use only for sandbox cleanup; this does not delete durable workspace files or ArtifactRefs.',\n\tinputSchema: removeFilesInputSchema,\n\toutputSchema: removeFilesOutputSchema,\n\tsideEffect: 'delete',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).removeFiles(input)\n})\n\nexport const cloudflareSandboxImportArtifactTool = defineTool({\n\tid: `${id}-import-artifact`,\n\tname: 'cloudflareSandboxImportArtifact',\n\tdescription:\n\t\t'Copy an existing object-store ArtifactRef into a Cloudflare sandbox workspace. Use only when arbitrary sandbox computation must consume that file. Do not import a supported document merely to read or edit it with general code.',\n\tinputSchema: importArtifactInputSchema,\n\toutputSchema: importArtifactOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).importArtifact(input)\n})\n\nexport const cloudflareSandboxExportArtifactTool = defineTool({\n\tid: `${id}-export-artifact`,\n\tname: 'cloudflareSandboxExportArtifact',\n\tdescription:\n\t\t'Persist a final file that was genuinely created inside the Cloudflare sandbox and return its ArtifactRef for delivery. Use only after sandbox work. Do not call for files returned by document, presentation, PDF, image, render, or conversion tools; those ArtifactRefs are already final.',\n\tinputSchema: exportArtifactInputSchema,\n\toutputSchema: exportArtifactOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).exportArtifact(input)\n})\n\nexport const cloudflareSandboxCreateSessionTool = defineTool({\n\tid: `${id}-create-session`,\n\tname: 'cloudflareSandboxCreateSession',\n\tdescription:\n\t\t'Create an isolated execution session inside an existing Cloudflare sandbox and return session_id. Use only when separate working directories or runtime state are needed; pass the id to later command and file calls.',\n\tinputSchema: sandboxIdInputSchema,\n\toutputSchema: createBridgeSessionOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).createSession(input)\n})\n\nexport const cloudflareSandboxDeleteSessionTool = defineTool({\n\tid: `${id}-delete-session`,\n\tname: 'cloudflareSandboxDeleteSession',\n\tdescription:\n\t\t'Delete an isolated execution session inside a Cloudflare sandbox. Use after session-specific work is complete; this does not destroy the parent sandbox.',\n\tinputSchema: deleteBridgeSessionInputSchema,\n\toutputSchema: deleteBridgeSessionOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).deleteSession(input)\n})\n\nexport const cloudflareSandboxModule = defineModule({\n\tid,\n\ttitle: 'Cloudflare Sandbox',\n\tdescription:\n\t\t'Cloudflare sandbox bridge: one-shot exec/files/sessions for workflows. Prefer a host workspace agent for multi-step shell. Client export remains first-class for Workspace hybrids. Prefer purpose-built document tools over sandbox for office formats.',\n\truntime: 'both',\n\tauth: { type: 'custom', schema: cloudflareSandboxAuthSchema },\n\tcategories: ['compute', 'sandbox', 'cloudflare'],\n\tclassification: 'standard',\n\ttags: ['exec', 'workspace', 'bridge'],\n\ttools: [\n\t\tcloudflareSandboxHealthTool,\n\t\tcloudflareSandboxCreateTool,\n\t\tcloudflareSandboxDestroyTool,\n\t\tcloudflareSandboxRunningTool,\n\t\tcloudflareSandboxExecTool,\n\t\tcloudflareSandboxExecuteCodeTool,\n\t\tcloudflareSandboxWriteFileTool,\n\t\tcloudflareSandboxReadFileTool,\n\t\tcloudflareSandboxWriteFilesTool,\n\t\tcloudflareSandboxReadFilesTool,\n\t\tcloudflareSandboxListFilesTool,\n\t\tcloudflareSandboxRemoveFilesTool,\n\t\tcloudflareSandboxImportArtifactTool,\n\t\tcloudflareSandboxExportArtifactTool,\n\t\tcloudflareSandboxCreateSessionTool,\n\t\tcloudflareSandboxDeleteSessionTool\n\t]\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"cloudflare-sandbox-BPXbaBOp.js","names":["#http","#storage","#storageAuth","#putFileBytes","#getFileBytes","#requireStorage"],"sources":["../src/vendors/cloudflare-sandbox/contracts.ts","../src/vendors/cloudflare-sandbox/domain.ts","../src/vendors/cloudflare-sandbox/client.ts","../src/vendors/cloudflare-sandbox/module.ts"],"sourcesContent":["/**\n * Cloudflare Sandbox Bridge HTTP API contracts.\n * Host deploys the bridge Worker; this pack is a Bearer client.\n * @see https://developers.cloudflare.com/sandbox/bridge/http-api/\n */\n\nimport { z } from 'zod'\n\nimport { s3AuthSchema } from '../s3/contracts'\n\nexport const MAX_ARGV = 64\nexport const MAX_ARG_CHARS = 100_000\nexport const MAX_FILE_PATH = 1024\nexport const MAX_FILE_TEXT = 2_000_000\n/** Bridge hard cap is 32 MiB; package tool path uses the same bound. */\nexport const MAX_FILE_BYTES = 32 * 1024 * 1024\nexport const MAX_WRITE_FILES = 20\nexport const MAX_READ_PATHS = 50\nexport const MAX_LIST_FILES = 500\nexport const DEFAULT_EXEC_TIMEOUT_MS = 30_000\nexport const MAX_EXEC_TIMEOUT_MS = 600_000\n\nexport const cloudflareSandboxAuthSchema = z.object({\n\tbase_url: z\n\t\t.string()\n\t\t.min(1)\n\t\t.describe('Sandbox bridge Worker origin, for example https://sandbox-bridge.example.workers.dev'),\n\tapi_key: z.string().min(1).describe('Bridge SANDBOX_API_KEY Bearer token'),\n\tstorage: s3AuthSchema\n\t\t.optional()\n\t\t.describe('Optional S3-compatible storage for importArtifact / exportArtifact (ArtifactRef)')\n})\n\nexport type CloudflareSandboxAuth = z.infer<typeof cloudflareSandboxAuthSchema>\n\n/** Object-store ArtifactRef for sandbox import/export. */\nexport const sandboxObjectArtifactRefSchema = z.object({\n\tstore: z.literal('object').describe('Object store containing the artifact'),\n\tkey: z.string().min(1).describe('Object key'),\n\tmedia_type: z.string().min(1).optional().describe('MIME or format hint when known'),\n\tfilename: z.string().min(1).optional().describe('Original or display file name'),\n\tbyte_length: z.int().min(0).optional().describe('Size in bytes when known')\n})\n\nexport type SandboxObjectArtifactRef = z.infer<typeof sandboxObjectArtifactRefSchema>\n\nconst sandboxId = z.string().min(1).max(200).describe('Sandbox id returned by create')\n\nexport const sandboxIdInputSchema = z.object({\n\tsandbox_id: sandboxId\n})\n\nexport const createSandboxOutputSchema = z.object({\n\tsandbox_id: z.string().describe('Created sandbox id')\n})\n\nexport const destroySandboxOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tdestroyed: z.literal(true)\n})\n\nexport const runningOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\trunning: z.boolean().describe('Whether the container is live')\n})\n\nexport const healthOutputSchema = z.object({\n\tok: z.boolean()\n})\n\nexport const execInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\targv: z\n\t\t.array(z.string().min(1).max(MAX_ARG_CHARS))\n\t\t.min(1)\n\t\t.max(MAX_ARGV)\n\t\t.describe('Command argv array (not a shell string). Example: [\"python3\",\"-c\",\"print(1)\"]'),\n\ttimeout_ms: z\n\t\t.int()\n\t\t.min(1)\n\t\t.max(MAX_EXEC_TIMEOUT_MS)\n\t\t.optional()\n\t\t.describe(`Exec timeout in ms (default ${DEFAULT_EXEC_TIMEOUT_MS})`),\n\tcwd: z.string().min(1).max(MAX_FILE_PATH).optional().describe('Working directory (default /workspace)'),\n\tsession_id: z\n\t\t.string()\n\t\t.min(1)\n\t\t.max(200)\n\t\t.optional()\n\t\t.describe('Optional bridge session id for isolated working directory and runtime state'),\n\tenv: z\n\t\t.record(z.string().min(1).max(128), z.string().max(8_192))\n\t\t.optional()\n\t\t.describe('Optional environment variables for the process when the bridge supports env')\n})\n\nexport const execOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tstdout: z.string().describe('Decoded standard output'),\n\tstderr: z.string().describe('Decoded standard error'),\n\texit_code: z.number().int().optional().describe('Process exit code when the stream ends with exit'),\n\tsuccess: z.boolean().describe('True when exit_code is 0'),\n\terror: z.string().optional().describe('Bridge error message when the stream ends with error'),\n\terror_code: z.string().optional().describe('Bridge error code when present')\n})\n\nconst filePathField = z\n\t.string()\n\t.min(1)\n\t.max(MAX_FILE_PATH)\n\t.describe('Path under workspace (with or without /workspace/ prefix)')\n\nconst sessionIdField = z.string().min(1).max(200).optional().describe('Optional Session-Id header')\n\nconst writeFileBodyFields = {\n\ttext: z.string().max(MAX_FILE_TEXT).optional().describe('Utf-8 file contents (omit when body_base64 is set)'),\n\tbody_base64: z\n\t\t.string()\n\t\t.min(1)\n\t\t.optional()\n\t\t.describe('Base64 file bytes for binary content (omit when text is set; max 32 MiB decoded)')\n}\n\nfunction refineExactlyOneBody(\n\tval: { text?: string | undefined; body_base64?: string | undefined },\n\tctx: z.RefinementCtx\n): void {\n\tconst hasText = val.text !== undefined\n\tconst hasB64 = val.body_base64 !== undefined\n\tif (hasText === hasB64) {\n\t\tctx.addIssue({\n\t\t\tcode: 'custom',\n\t\t\tmessage: 'Provide exactly one of text or body_base64'\n\t\t})\n\t}\n}\n\nexport const writeFileInputSchema = z\n\t.object({\n\t\tsandbox_id: sandboxId,\n\t\tpath: filePathField,\n\t\t...writeFileBodyFields,\n\t\tsession_id: sessionIdField\n\t})\n\t.superRefine(refineExactlyOneBody)\n\nexport const writeFileOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tpath: z.string(),\n\tok: z.literal(true),\n\tbyte_length: z.number().int().nonnegative().optional().describe('Decoded byte length written when known')\n})\n\nexport const readFileInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tpath: filePathField,\n\tencoding: z\n\t\t.enum(['utf8', 'base64'])\n\t\t.optional()\n\t\t.describe('Response encoding (default utf8 for text; use base64 for binary)'),\n\tsession_id: sessionIdField\n})\n\nexport const readFileOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tpath: z.string(),\n\ttext: z.string().optional().describe('Utf-8 contents when encoding is utf8 (default)'),\n\tbody_base64: z.string().optional().describe('Base64 contents when encoding is base64'),\n\tbyte_length: z.number().int().nonnegative().optional().describe('Decoded byte length')\n})\n\nexport const writeFilesInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tfiles: z\n\t\t.array(\n\t\t\tz\n\t\t\t\t.object({\n\t\t\t\t\tpath: z.string().min(1).max(MAX_FILE_PATH).describe('Path under workspace'),\n\t\t\t\t\t...writeFileBodyFields\n\t\t\t\t})\n\t\t\t\t.superRefine(refineExactlyOneBody)\n\t\t)\n\t\t.min(1)\n\t\t.max(MAX_WRITE_FILES)\n\t\t.describe('Files to write under workspace (text or body_base64 each)'),\n\tsession_id: sessionIdField\n})\n\nexport const writeFilesOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tpaths: z.array(z.string()),\n\tok: z.literal(true)\n})\n\nexport const readFilesInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tpaths: z\n\t\t.array(z.string().min(1).max(MAX_FILE_PATH).describe('Path under workspace'))\n\t\t.min(1)\n\t\t.max(MAX_READ_PATHS)\n\t\t.describe('Paths to read under workspace'),\n\tencoding: z.enum(['utf8', 'base64']).optional().describe('Response encoding for all files (default utf8)'),\n\tsession_id: sessionIdField\n})\n\nexport const readFilesOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tfiles: z.array(\n\t\tz.object({\n\t\t\tpath: z.string(),\n\t\t\ttext: z.string().optional(),\n\t\t\tbody_base64: z.string().optional(),\n\t\t\tbyte_length: z.number().int().nonnegative().optional()\n\t\t})\n\t)\n})\n\nexport const listFilesInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tdirectory_path: z.string().max(MAX_FILE_PATH).optional().describe('Directory to list (default /workspace)'),\n\tsession_id: sessionIdField\n})\n\nexport const listFilesOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tpaths: z.array(z.string()).describe('Absolute or workspace-relative file paths found'),\n\traw: z.unknown().optional().describe('Provider listing payload when available')\n})\n\nexport const removeFilesInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tpaths: z\n\t\t.array(z.string().min(1).max(MAX_FILE_PATH))\n\t\t.min(1)\n\t\t.max(MAX_READ_PATHS)\n\t\t.describe('Paths to remove under workspace'),\n\tsession_id: sessionIdField\n})\n\nexport const removeFilesOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tpaths: z.array(z.string()),\n\tok: z.literal(true)\n})\n\nexport const importArtifactInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tpath: filePathField,\n\tsource: sandboxObjectArtifactRefSchema.describe('Object-store ArtifactRef to copy into the sandbox'),\n\tsession_id: sessionIdField\n})\n\nexport const importArtifactOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tpath: z.string(),\n\tok: z.literal(true),\n\tbyte_length: z.number().int().nonnegative()\n})\n\nexport const exportArtifactInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tpath: filePathField,\n\tdestination_key: z.string().min(1).describe('Object key to write under bound storage'),\n\tsession_id: sessionIdField\n})\n\nexport const exportArtifactOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tpath: z.string(),\n\tartifact: sandboxObjectArtifactRefSchema\n})\n\nexport const createBridgeSessionOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tsession_id: z.string().describe('Bridge session id for Session-Id header')\n})\n\nexport const deleteBridgeSessionInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tsession_id: z.string().min(1).max(200).describe('Bridge session id to delete')\n})\n\nexport const deleteBridgeSessionOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tsession_id: z.string(),\n\tdeleted: z.literal(true)\n})\n\nexport const executeCodeInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tcode: z.string().min(1).max(MAX_ARG_CHARS).describe('Source code to run'),\n\tlanguage: z\n\t\t.enum(['python', 'javascript', 'typescript', 'shell'])\n\t\t.optional()\n\t\t.describe('Runtime language (default python)'),\n\ttimeout_ms: z\n\t\t.int()\n\t\t.min(1)\n\t\t.max(MAX_EXEC_TIMEOUT_MS)\n\t\t.optional()\n\t\t.describe(`Exec timeout in ms (default ${DEFAULT_EXEC_TIMEOUT_MS})`),\n\tsession_id: z\n\t\t.string()\n\t\t.min(1)\n\t\t.max(200)\n\t\t.optional()\n\t\t.describe('Optional bridge session id for isolated working directory and runtime state')\n})\n\n/**\n * Mount an S3-compatible bucket into the sandbox filesystem.\n * @see https://developers.cloudflare.com/sandbox/bridge/http-api/#bucket-mounts\n *\n * Two bridge modes:\n * - **R2 binding:** omit `endpoint`; `bucket` is the Worker R2 binding name.\n * - **Remote S3/R2/GCS:** set `endpoint` (+ optional credentials; bridge may use Worker secrets).\n */\nexport const mountBucketInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tbucket: z\n\t\t.string()\n\t\t.min(1)\n\t\t.max(256)\n\t\t.describe(\n\t\t\t'R2 Worker binding name when endpoint is omitted; otherwise the remote bucket name (e.g. for S3/R2 endpoint mounts)'\n\t\t),\n\tmount_path: z\n\t\t.string()\n\t\t.min(1)\n\t\t.max(MAX_FILE_PATH)\n\t\t.refine((p) => p.startsWith('/'), { message: 'mount_path must be an absolute path (start with /)' })\n\t\t.describe('Absolute path inside the sandbox to mount at (e.g. /data or /mnt/workspace)'),\n\tendpoint: z\n\t\t.url()\n\t\t.optional()\n\t\t.describe(\n\t\t\t'S3-compatible endpoint URL (e.g. https://s3.amazonaws.com or https://ACCOUNT.r2.cloudflarestorage.com). Omit for Worker R2 binding mounts'\n\t\t),\n\tprovider: z\n\t\t.enum(['r2', 's3', 'gcs'])\n\t\t.optional()\n\t\t.describe('Provider hint for s3fs optimizations when using endpoint mounts'),\n\tread_only: z.boolean().optional().describe('Mount read-only (default false)'),\n\tprefix: z\n\t\t.string()\n\t\t.min(1)\n\t\t.max(MAX_FILE_PATH)\n\t\t.optional()\n\t\t.describe('Bucket prefix/subdirectory to expose at the mount (must start with / when set)'),\n\taccess_key_id: z\n\t\t.string()\n\t\t.min(1)\n\t\t.optional()\n\t\t.describe('Access key for endpoint mounts (maps to bridge credentials.accessKeyId)'),\n\tsecret_access_key: z\n\t\t.string()\n\t\t.min(1)\n\t\t.optional()\n\t\t.describe('Secret key for endpoint mounts (maps to bridge credentials.secretAccessKey)'),\n\tcredential_proxy: z\n\t\t.boolean()\n\t\t.optional()\n\t\t.describe(\n\t\t\t'When true, bridge keeps credentials out of the container (egress signing). Endpoint mounts only; requires ContainerProxy on the bridge Worker'\n\t\t),\n\tlocal_bucket: z\n\t\t.boolean()\n\t\t.optional()\n\t\t.describe('When true, use local R2 binding sync (wrangler dev). Mutually exclusive with endpoint'),\n\ts3fs_options: z\n\t\t.array(z.string().min(1).max(256))\n\t\t.max(32)\n\t\t.optional()\n\t\t.describe('Advanced s3fs mount flags (e.g. use_cache=/tmp/cache)')\n})\n\nexport const mountBucketOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tbucket: z.string(),\n\tmount_path: z.string(),\n\tok: z.literal(true)\n})\n\nexport const unmountBucketInputSchema = z.object({\n\tsandbox_id: sandboxId,\n\tmount_path: z\n\t\t.string()\n\t\t.min(1)\n\t\t.max(MAX_FILE_PATH)\n\t\t.refine((p) => p.startsWith('/'), { message: 'mount_path must be an absolute path (start with /)' })\n\t\t.describe('Absolute mount path previously passed to mount')\n})\n\nexport const unmountBucketOutputSchema = z.object({\n\tsandbox_id: z.string(),\n\tmount_path: z.string(),\n\tok: z.literal(true)\n})\n\nexport type SandboxIdInput = z.infer<typeof sandboxIdInputSchema>\nexport type CreateSandboxOutput = z.infer<typeof createSandboxOutputSchema>\nexport type DestroySandboxOutput = z.infer<typeof destroySandboxOutputSchema>\nexport type RunningOutput = z.infer<typeof runningOutputSchema>\nexport type HealthOutput = z.infer<typeof healthOutputSchema>\nexport type ExecInput = z.infer<typeof execInputSchema>\nexport type ExecOutput = z.infer<typeof execOutputSchema>\nexport type WriteFileInput = z.infer<typeof writeFileInputSchema>\nexport type WriteFileOutput = z.infer<typeof writeFileOutputSchema>\nexport type ReadFileInput = z.infer<typeof readFileInputSchema>\nexport type ReadFileOutput = z.infer<typeof readFileOutputSchema>\nexport type WriteFilesInput = z.infer<typeof writeFilesInputSchema>\nexport type WriteFilesOutput = z.infer<typeof writeFilesOutputSchema>\nexport type ReadFilesInput = z.infer<typeof readFilesInputSchema>\nexport type ReadFilesOutput = z.infer<typeof readFilesOutputSchema>\nexport type ListFilesInput = z.infer<typeof listFilesInputSchema>\nexport type ListFilesOutput = z.infer<typeof listFilesOutputSchema>\nexport type RemoveFilesInput = z.infer<typeof removeFilesInputSchema>\nexport type RemoveFilesOutput = z.infer<typeof removeFilesOutputSchema>\nexport type ImportArtifactInput = z.infer<typeof importArtifactInputSchema>\nexport type ImportArtifactOutput = z.infer<typeof importArtifactOutputSchema>\nexport type ExportArtifactInput = z.infer<typeof exportArtifactInputSchema>\nexport type ExportArtifactOutput = z.infer<typeof exportArtifactOutputSchema>\nexport type CreateBridgeSessionOutput = z.infer<typeof createBridgeSessionOutputSchema>\nexport type DeleteBridgeSessionInput = z.infer<typeof deleteBridgeSessionInputSchema>\nexport type DeleteBridgeSessionOutput = z.infer<typeof deleteBridgeSessionOutputSchema>\nexport type ExecuteCodeInput = z.infer<typeof executeCodeInputSchema>\nexport type MountBucketInput = z.infer<typeof mountBucketInputSchema>\nexport type MountBucketOutput = z.infer<typeof mountBucketOutputSchema>\nexport type UnmountBucketInput = z.infer<typeof unmountBucketInputSchema>\nexport type UnmountBucketOutput = z.infer<typeof unmountBucketOutputSchema>\n","/**\n * Cloudflare Sandbox Bridge pure helpers (no HTTP).\n */\n\nimport { isPlainObject, isString } from 'es-toolkit'\n\nimport { ToolError } from '../../core/errors'\nimport { base64ToBytes, utf8ToBytes } from '../../shared/bytes'\nimport { MAX_FILE_BYTES } from './contracts'\n\n/** Normalize a host path to the bridge URL segment under /file/… (no leading slash). */\nexport function workspaceFileKey(path: string): string {\n\tconst trimmed = path.trim()\n\tif (!trimmed) {\n\t\tthrow new ToolError('File path is empty', { code: 'bad_input' })\n\t}\n\tconst noLead = trimmed.replace(/^\\/+/, '')\n\tconst under = noLead.startsWith('workspace/') ? noLead : `workspace/${noLead}`\n\t// Reject traversal\n\tconst parts = under.split('/')\n\tif (parts.some((p) => p === '..' || p === '')) {\n\t\tthrow new ToolError('File path must stay under workspace', {\n\t\t\tcode: 'bad_input',\n\t\t\tdetails: { path: trimmed }\n\t\t})\n\t}\n\treturn under\n}\n\n/** Absolute workspace path for shell list/rm (leading slash). */\nexport function workspaceAbsolutePath(path: string): string {\n\tconst key = workspaceFileKey(path)\n\treturn `/${key}`\n}\n\n/** Shell-safe single-quoted string. */\nexport function shellQuote(value: string): string {\n\treturn `'${value.replaceAll(\"'\", `'\\\\''`)}'`\n}\n\n/**\n * Resolve write-file body to raw bytes (text UTF-8 or base64).\n * Enforces MAX_FILE_BYTES (bridge limit).\n */\nexport function resolveWriteFileBytes(input: {\n\ttext?: string | undefined\n\tbody_base64?: string | undefined\n}): Uint8Array {\n\tif (input.body_base64 !== undefined && input.text !== undefined) {\n\t\tthrow new ToolError('Provide exactly one of text or body_base64', { code: 'bad_input' })\n\t}\n\tif (input.body_base64 !== undefined) {\n\t\tconst bytes = base64ToBytes(input.body_base64)\n\t\tif (bytes.byteLength > MAX_FILE_BYTES) {\n\t\t\tthrow new ToolError('Sandbox file exceeds max byte limit', {\n\t\t\t\tcode: 'too_large',\n\t\t\t\tdetails: { max_bytes: MAX_FILE_BYTES, content_length: bytes.byteLength }\n\t\t\t})\n\t\t}\n\t\treturn bytes\n\t}\n\tif (input.text !== undefined) {\n\t\tconst bytes = utf8ToBytes(input.text)\n\t\tif (bytes.byteLength > MAX_FILE_BYTES) {\n\t\t\tthrow new ToolError('Sandbox file exceeds max byte limit', {\n\t\t\t\tcode: 'too_large',\n\t\t\t\tdetails: { max_bytes: MAX_FILE_BYTES, content_length: bytes.byteLength }\n\t\t\t})\n\t\t}\n\t\treturn bytes\n\t}\n\tthrow new ToolError('Provide exactly one of text or body_base64', { code: 'bad_input' })\n}\n\nexport type ParsedExecStream = {\n\tstdout: string\n\tstderr: string\n\texit_code?: number\n\terror?: string\n\terror_code?: string\n}\n\nexport type ParseExecSseOptions = {\n\t/** Called for each stdout chunk as the SSE body is walked (buffer may still be complete). */\n\tonStdout?: (chunk: string) => void\n\t/** Called for each stderr chunk as the SSE body is walked. */\n\tonStderr?: (chunk: string) => void\n}\n\n/**\n * Parse bridge /exec text/event-stream body.\n * Events: stdout/stderr (base64 data), exit ({\"exit_code\":N}), error ({\"error\",\"code\"}).\n */\nexport function parseExecSse(body: string, options: ParseExecSseOptions = {}): ParsedExecStream {\n\tconst stdoutChunks: string[] = []\n\tconst stderrChunks: string[] = []\n\tlet exit_code: number | undefined\n\tlet error: string | undefined\n\tlet error_code: string | undefined\n\n\tconst blocks = body.replaceAll('\\r\\n', '\\n').split('\\n\\n')\n\tfor (const block of blocks) {\n\t\tconst lines = block.split('\\n').filter((line) => line.length > 0)\n\t\tif (lines.length === 0) continue\n\t\tlet event = 'message'\n\t\tconst dataLines: string[] = []\n\t\tfor (const line of lines) {\n\t\t\tif (line.startsWith('event:')) {\n\t\t\t\tevent = line.slice(6).trim()\n\t\t\t} else if (line.startsWith('data:')) {\n\t\t\t\tdataLines.push(line.slice(5).trimStart())\n\t\t\t}\n\t\t}\n\t\tconst data = dataLines.join('\\n')\n\t\tif (event === 'stdout' && data.length > 0) {\n\t\t\tconst chunk = decodeBase64Chunk(data)\n\t\t\tstdoutChunks.push(chunk)\n\t\t\toptions.onStdout?.(chunk)\n\t\t} else if (event === 'stderr' && data.length > 0) {\n\t\t\tconst chunk = decodeBase64Chunk(data)\n\t\t\tstderrChunks.push(chunk)\n\t\t\toptions.onStderr?.(chunk)\n\t\t} else if (event === 'exit' && data.length > 0) {\n\t\t\tconst parsed = safeJson(data)\n\t\t\tif (isPlainObject(parsed)) {\n\t\t\t\tconst code = parsed['exit_code']\n\t\t\t\tif (typeof code === 'number' && Number.isFinite(code)) exit_code = code\n\t\t\t}\n\t\t} else if (event === 'error' && data.length > 0) {\n\t\t\tconst parsed = safeJson(data)\n\t\t\tif (isPlainObject(parsed)) {\n\t\t\t\tif (isString(parsed['error'])) error = parsed['error']\n\t\t\t\tif (isString(parsed['code'])) error_code = parsed['code']\n\t\t\t} else {\n\t\t\t\terror = data\n\t\t\t}\n\t\t}\n\t}\n\n\tconst out: ParsedExecStream = {\n\t\tstdout: stdoutChunks.join(''),\n\t\tstderr: stderrChunks.join('')\n\t}\n\tif (exit_code !== undefined) out.exit_code = exit_code\n\tif (error !== undefined) out.error = error\n\tif (error_code !== undefined) out.error_code = error_code\n\treturn out\n}\n\nfunction decodeBase64Chunk(data: string): string {\n\ttry {\n\t\t// Bun/Node Buffer or atob\n\t\tif (typeof Buffer !== 'undefined') {\n\t\t\treturn Buffer.from(data, 'base64').toString('utf8')\n\t\t}\n\t\tconst binary = atob(data)\n\t\tconst bytes = new Uint8Array(binary.length)\n\t\tfor (let i = 0; i < binary.length; i += 1) bytes[i] = binary.charCodeAt(i)\n\t\treturn new TextDecoder().decode(bytes)\n\t} catch {\n\t\treturn data\n\t}\n}\n\nfunction safeJson(text: string): unknown {\n\ttry {\n\t\tconst value: unknown = JSON.parse(text)\n\t\treturn value\n\t} catch {\n\t\treturn undefined\n\t}\n}\n\n/** Build argv for executeCode over the bridge (no native runCode route). */\nexport function executeCodeArgv(language: string, code: string): string[] {\n\tswitch (language) {\n\t\tcase 'javascript':\n\t\tcase 'typescript':\n\t\t\treturn ['node', '-e', code]\n\t\tcase 'shell':\n\t\t\treturn ['sh', '-lc', code]\n\t\tcase 'python':\n\t\tdefault:\n\t\t\treturn ['python3', '-c', code]\n\t}\n}\n","/**\n * Cloudflare Sandbox Bridge vendor client (HttpService + Bearer).\n * Host: `new CloudflareSandboxClient(auth)`. Agent: `fromContext(ctx)`.\n * Gold: `src/vendors/resend/client.ts` + messaging ArtifactRef storage pattern.\n * @see https://developers.cloudflare.com/sandbox/bridge/http-api/\n */\n\nimport { isPlainObject, isString, trimEnd } from 'es-toolkit'\n\nimport { ToolError } from '../../core/errors'\nimport { requireAuth } from '../../core/provider'\nimport type { ToolContext } from '../../core/types'\nimport { bytesToBase64, bytesToUtf8, toArrayBuffer } from '../../shared/bytes'\nimport { HttpService } from '../../transport/http-service'\nimport type { HttpServiceOptions } from '../../transport/http-service'\nimport { S3Client } from '../s3'\nimport type {\n\tCloudflareSandboxAuth,\n\tCreateBridgeSessionOutput,\n\tCreateSandboxOutput,\n\tDeleteBridgeSessionInput,\n\tDeleteBridgeSessionOutput,\n\tDestroySandboxOutput,\n\tExecInput,\n\tExecOutput,\n\tExecuteCodeInput,\n\tExportArtifactInput,\n\tExportArtifactOutput,\n\tHealthOutput,\n\tImportArtifactInput,\n\tImportArtifactOutput,\n\tListFilesInput,\n\tListFilesOutput,\n\tMountBucketInput,\n\tMountBucketOutput,\n\tReadFileInput,\n\tReadFileOutput,\n\tReadFilesInput,\n\tReadFilesOutput,\n\tRemoveFilesInput,\n\tRemoveFilesOutput,\n\tRunningOutput,\n\tSandboxIdInput,\n\tUnmountBucketInput,\n\tUnmountBucketOutput,\n\tWriteFileInput,\n\tWriteFileOutput,\n\tWriteFilesInput,\n\tWriteFilesOutput\n} from './contracts'\nimport {\n\tDEFAULT_EXEC_TIMEOUT_MS,\n\tMAX_FILE_BYTES,\n\tMAX_LIST_FILES,\n\tcloudflareSandboxAuthSchema,\n\tmountBucketInputSchema,\n\tunmountBucketInputSchema\n} from './contracts'\nimport {\n\texecuteCodeArgv,\n\tparseExecSse,\n\tresolveWriteFileBytes,\n\tshellQuote,\n\tworkspaceAbsolutePath,\n\tworkspaceFileKey\n} from './domain'\n\nexport type CloudflareSandboxClientOptions = Pick<HttpServiceOptions, 'fetch' | 'signal'>\n\nexport class CloudflareSandboxClient {\n\treadonly #http: HttpService\n\treadonly #storage: S3Client | undefined\n\t/** Optional S3 auth fields for endpoint mount credential fallback (Mastra workspace FS). */\n\treadonly #storageAuth:\n\t\t| {\n\t\t\t\taccess_key_id: string\n\t\t\t\tsecret_access_key: string\n\t\t\t\tendpoint?: string | undefined\n\t\t }\n\t\t| undefined\n\n\tconstructor(auth: CloudflareSandboxAuth, options: CloudflareSandboxClientOptions = {}) {\n\t\tconst parsed = cloudflareSandboxAuthSchema.safeParse(auth)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid Cloudflare Sandbox auth credentials', {\n\t\t\t\tcode: 'bad_auth',\n\t\t\t\tdetails: { issues: parsed.error.issues.map((issue) => issue.message) }\n\t\t\t})\n\t\t}\n\t\tthis.#http = new HttpService({\n\t\t\tbaseURL: trimEnd(parsed.data.base_url, '/'),\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${parsed.data.api_key}`\n\t\t\t},\n\t\t\ttimeout: 120_000,\n\t\t\tlabel: 'Cloudflare Sandbox',\n\t\t\t...(options.fetch && { fetch: options.fetch }),\n\t\t\t...(options.signal && { signal: options.signal })\n\t\t})\n\t\tthis.#storage = parsed.data.storage\n\t\t\t? new S3Client(parsed.data.storage, {\n\t\t\t\t\t...(options.fetch && { fetch: options.fetch }),\n\t\t\t\t\t...(options.signal && { signal: options.signal })\n\t\t\t\t})\n\t\t\t: undefined\n\t\tthis.#storageAuth = parsed.data.storage\n\t\t\t? {\n\t\t\t\t\taccess_key_id: parsed.data.storage.access_key_id,\n\t\t\t\t\tsecret_access_key: parsed.data.storage.secret_access_key,\n\t\t\t\t\t...(parsed.data.storage.endpoint && { endpoint: parsed.data.storage.endpoint })\n\t\t\t\t}\n\t\t\t: undefined\n\t}\n\n\tstatic fromContext(ctx: ToolContext): CloudflareSandboxClient {\n\t\treturn new CloudflareSandboxClient(requireAuth(ctx, cloudflareSandboxAuthSchema), {\n\t\t\t...(ctx.fetch && { fetch: ctx.fetch }),\n\t\t\t...(ctx.signal && { signal: ctx.signal })\n\t\t})\n\t}\n\n\t/** Liveness probe on the bridge. */\n\tasync health(): Promise<HealthOutput> {\n\t\tconst { data } = await this.#http.get('/health', {\n\t\t\tlabel: 'Cloudflare Sandbox health'\n\t\t})\n\t\tif (isPlainObject(data) && data['ok'] === true) return { ok: true }\n\t\tif (isPlainObject(data) && data['ok'] === false) return { ok: false }\n\t\treturn { ok: true }\n\t}\n\n\tasync create(): Promise<CreateSandboxOutput> {\n\t\tconst { data } = await this.#http.post('/v1/sandbox', undefined, {\n\t\t\tlabel: 'Cloudflare Sandbox create'\n\t\t})\n\t\tif (!isPlainObject(data) || !isString(data['id'])) {\n\t\t\tthrow new ToolError('Unexpected create sandbox response', { code: 'upstream' })\n\t\t}\n\t\treturn { sandbox_id: data['id'] }\n\t}\n\n\tasync destroy(input: SandboxIdInput): Promise<DestroySandboxOutput> {\n\t\tawait this.#http.delete(`/v1/sandbox/${encodeURIComponent(input.sandbox_id)}`, {\n\t\t\tlabel: 'Cloudflare Sandbox destroy'\n\t\t})\n\t\treturn { sandbox_id: input.sandbox_id, destroyed: true }\n\t}\n\n\tasync running(input: SandboxIdInput): Promise<RunningOutput> {\n\t\tconst { data } = await this.#http.get(`/v1/sandbox/${encodeURIComponent(input.sandbox_id)}/running`, {\n\t\t\tlabel: 'Cloudflare Sandbox running'\n\t\t})\n\t\tif (!isPlainObject(data) || typeof data['running'] !== 'boolean') {\n\t\t\tthrow new ToolError('Unexpected running response', { code: 'upstream' })\n\t\t}\n\t\treturn { sandbox_id: input.sandbox_id, running: data['running'] }\n\t}\n\n\t/**\n\t * Run a command. Bridge returns text/event-stream (stdout/stderr base64 + exit).\n\t * Uses HttpService.bytes so ofetch does not try to JSON-parse the SSE body.\n\t * Optional onStdout/onStderr fire while walking the buffered SSE (not true wire streaming).\n\t */\n\tasync exec(\n\t\tinput: ExecInput,\n\t\tstream: { onStdout?: (chunk: string) => void; onStderr?: (chunk: string) => void } = {}\n\t): Promise<ExecOutput> {\n\t\tconst body: Record<string, unknown> = {\n\t\t\targv: input.argv,\n\t\t\ttimeout_ms: input.timeout_ms ?? DEFAULT_EXEC_TIMEOUT_MS\n\t\t}\n\t\tif (input.cwd) body['cwd'] = input.cwd\n\t\tif (input.env && Object.keys(input.env).length > 0) body['env'] = input.env\n\n\t\tconst headers: Record<string, string> = {\n\t\t\t'Content-Type': 'application/json',\n\t\t\tAccept: 'text/event-stream'\n\t\t}\n\t\tif (input.session_id) headers['Session-Id'] = input.session_id\n\n\t\tconst { bytes } = await this.#http.bytes('POST', `/v1/sandbox/${encodeURIComponent(input.sandbox_id)}/exec`, {\n\t\t\tbody,\n\t\t\theaders,\n\t\t\tlabel: 'Cloudflare Sandbox exec'\n\t\t})\n\t\tconst text = new TextDecoder().decode(bytes)\n\t\tconst parsed = parseExecSse(text, {\n\t\t\t...(stream.onStdout && { onStdout: stream.onStdout }),\n\t\t\t...(stream.onStderr && { onStderr: stream.onStderr })\n\t\t})\n\t\tif (parsed.error && parsed.exit_code === undefined) {\n\t\t\tthrow new ToolError(parsed.error, {\n\t\t\t\tcode: 'upstream',\n\t\t\t\tdetails: {\n\t\t\t\t\t...(parsed.error_code && { error_code: parsed.error_code }),\n\t\t\t\t\tsandbox_id: input.sandbox_id\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\tconst exit_code = parsed.exit_code ?? (parsed.error ? 1 : 0)\n\t\tconst out: ExecOutput = {\n\t\t\tsandbox_id: input.sandbox_id,\n\t\t\tstdout: parsed.stdout,\n\t\t\tstderr: parsed.stderr,\n\t\t\texit_code,\n\t\t\tsuccess: exit_code === 0\n\t\t}\n\t\tif (parsed.error) out.error = parsed.error\n\t\tif (parsed.error_code) out.error_code = parsed.error_code\n\t\treturn out\n\t}\n\n\t/** Execute source via python3/node/sh on the bridge (no native runCode route). */\n\tasync executeCode(input: ExecuteCodeInput): Promise<ExecOutput> {\n\t\tconst language = input.language ?? 'python'\n\t\treturn this.exec({\n\t\t\tsandbox_id: input.sandbox_id,\n\t\t\targv: executeCodeArgv(language, input.code),\n\t\t\t...(input.timeout_ms !== undefined && { timeout_ms: input.timeout_ms }),\n\t\t\t...(input.session_id && { session_id: input.session_id })\n\t\t})\n\t}\n\n\tasync writeFile(input: WriteFileInput): Promise<WriteFileOutput> {\n\t\tconst bytes = resolveWriteFileBytes(input)\n\t\tawait this.#putFileBytes(input.sandbox_id, input.path, bytes, input.session_id)\n\t\treturn {\n\t\t\tsandbox_id: input.sandbox_id,\n\t\t\tpath: input.path,\n\t\t\tok: true,\n\t\t\tbyte_length: bytes.byteLength\n\t\t}\n\t}\n\n\tasync readFile(input: ReadFileInput): Promise<ReadFileOutput> {\n\t\tconst bytes = await this.#getFileBytes(input.sandbox_id, input.path, input.session_id)\n\t\tconst encoding = input.encoding ?? 'utf8'\n\t\tconst out: ReadFileOutput = {\n\t\t\tsandbox_id: input.sandbox_id,\n\t\t\tpath: input.path,\n\t\t\tbyte_length: bytes.byteLength\n\t\t}\n\t\tif (encoding === 'base64') {\n\t\t\tout.body_base64 = bytesToBase64(bytes)\n\t\t} else {\n\t\t\tout.text = bytesToUtf8(bytes)\n\t\t}\n\t\treturn out\n\t}\n\n\tasync writeFiles(input: WriteFilesInput): Promise<WriteFilesOutput> {\n\t\tconst paths: string[] = []\n\t\tfor (const file of input.files) {\n\t\t\tawait this.writeFile({\n\t\t\t\tsandbox_id: input.sandbox_id,\n\t\t\t\tpath: file.path,\n\t\t\t\t...(file.text !== undefined && { text: file.text }),\n\t\t\t\t...(file.body_base64 !== undefined && { body_base64: file.body_base64 }),\n\t\t\t\t...(input.session_id && { session_id: input.session_id })\n\t\t\t})\n\t\t\tpaths.push(file.path)\n\t\t}\n\t\treturn { sandbox_id: input.sandbox_id, paths, ok: true }\n\t}\n\n\tasync readFiles(input: ReadFilesInput): Promise<ReadFilesOutput> {\n\t\tconst files: ReadFilesOutput['files'] = []\n\t\tfor (const path of input.paths) {\n\t\t\tconst row = await this.readFile({\n\t\t\t\tsandbox_id: input.sandbox_id,\n\t\t\t\tpath,\n\t\t\t\t...(input.encoding && { encoding: input.encoding }),\n\t\t\t\t...(input.session_id && { session_id: input.session_id })\n\t\t\t})\n\t\t\tfiles.push({\n\t\t\t\tpath: row.path,\n\t\t\t\t...(row.text !== undefined && { text: row.text }),\n\t\t\t\t...(row.body_base64 !== undefined && { body_base64: row.body_base64 }),\n\t\t\t\t...(row.byte_length !== undefined && { byte_length: row.byte_length })\n\t\t\t})\n\t\t}\n\t\treturn { sandbox_id: input.sandbox_id, files }\n\t}\n\n\t/** List files via find in the workspace (bridge has no list route). */\n\tasync listFiles(input: ListFilesInput): Promise<ListFilesOutput> {\n\t\tconst dir = input.directory_path?.trim() || '/workspace'\n\t\tconst abs = dir.startsWith('/') ? dir : workspaceAbsolutePath(dir)\n\t\tconst out = await this.exec({\n\t\t\tsandbox_id: input.sandbox_id,\n\t\t\targv: ['sh', '-lc', `find ${shellQuote(abs)} -maxdepth 4 -type f 2>/dev/null | head -n ${MAX_LIST_FILES}`],\n\t\t\t...(input.session_id && { session_id: input.session_id })\n\t\t})\n\t\tconst paths = out.stdout\n\t\t\t.split('\\n')\n\t\t\t.map((line) => line.trim())\n\t\t\t.filter((line) => line.length > 0)\n\t\treturn {\n\t\t\tsandbox_id: input.sandbox_id,\n\t\t\tpaths,\n\t\t\traw: { stdout: out.stdout, stderr: out.stderr, exit_code: out.exit_code }\n\t\t}\n\t}\n\n\t/** Remove files via rm (bridge has no delete-file route). */\n\tasync removeFiles(input: RemoveFilesInput): Promise<RemoveFilesOutput> {\n\t\tfor (const path of input.paths) {\n\t\t\tconst abs = path.startsWith('/') ? path : workspaceAbsolutePath(path)\n\t\t\tawait this.exec({\n\t\t\t\tsandbox_id: input.sandbox_id,\n\t\t\t\targv: ['rm', '-f', '--', abs],\n\t\t\t\t...(input.session_id && { session_id: input.session_id })\n\t\t\t})\n\t\t}\n\t\treturn { sandbox_id: input.sandbox_id, paths: input.paths, ok: true }\n\t}\n\n\t/**\n\t * Copy an object-store ArtifactRef into the sandbox workspace.\n\t * Requires auth.storage.\n\t */\n\tasync importArtifact(input: ImportArtifactInput): Promise<ImportArtifactOutput> {\n\t\tconst storage = this.#requireStorage('importArtifact')\n\t\tif (input.source.store !== 'object') {\n\t\t\tthrow new ToolError('Sandbox importArtifact only supports store=object ArtifactRefs', {\n\t\t\t\tcode: 'bad_input'\n\t\t\t})\n\t\t}\n\t\tconst bytes = await storage.getBytes(input.source.key, { maxBytes: MAX_FILE_BYTES })\n\t\tawait this.#putFileBytes(input.sandbox_id, input.path, bytes, input.session_id)\n\t\treturn {\n\t\t\tsandbox_id: input.sandbox_id,\n\t\t\tpath: input.path,\n\t\t\tok: true,\n\t\t\tbyte_length: bytes.byteLength\n\t\t}\n\t}\n\n\t/**\n\t * Copy a sandbox workspace file to object storage and return an ArtifactRef.\n\t * Requires auth.storage.\n\t */\n\tasync exportArtifact(input: ExportArtifactInput): Promise<ExportArtifactOutput> {\n\t\tconst storage = this.#requireStorage('exportArtifact')\n\t\tconst bytes = await this.#getFileBytes(input.sandbox_id, input.path, input.session_id)\n\t\tawait storage.putBytes(input.destination_key, bytes)\n\t\treturn {\n\t\t\tsandbox_id: input.sandbox_id,\n\t\t\tpath: input.path,\n\t\t\tartifact: {\n\t\t\t\tstore: 'object',\n\t\t\t\tkey: input.destination_key,\n\t\t\t\tbyte_length: bytes.byteLength\n\t\t\t}\n\t\t}\n\t}\n\n\tasync createSession(input: SandboxIdInput): Promise<CreateBridgeSessionOutput> {\n\t\tconst { data } = await this.#http.post(`/v1/sandbox/${encodeURIComponent(input.sandbox_id)}/session`, undefined, {\n\t\t\tlabel: 'Cloudflare Sandbox createSession'\n\t\t})\n\t\tif (!isPlainObject(data) || !isString(data['id'])) {\n\t\t\tthrow new ToolError('Unexpected create session response', { code: 'upstream' })\n\t\t}\n\t\treturn { sandbox_id: input.sandbox_id, session_id: data['id'] }\n\t}\n\n\tasync deleteSession(input: DeleteBridgeSessionInput): Promise<DeleteBridgeSessionOutput> {\n\t\tawait this.#http.delete(\n\t\t\t`/v1/sandbox/${encodeURIComponent(input.sandbox_id)}/session/${encodeURIComponent(input.session_id)}`,\n\t\t\t{ label: 'Cloudflare Sandbox deleteSession' }\n\t\t)\n\t\treturn { sandbox_id: input.sandbox_id, session_id: input.session_id, deleted: true }\n\t}\n\n\t/**\n\t * Mount an S3-compatible bucket (or Worker R2 binding) at an absolute path in the sandbox.\n\t * Bridge: `POST /v1/sandbox/:id/mount`.\n\t * For Mastra / host workspace S3 FS: pass `endpoint` + credentials (or rely on auth.storage).\n\t * @see https://developers.cloudflare.com/sandbox/bridge/http-api/#bucket-mounts\n\t */\n\tasync mount(input: MountBucketInput): Promise<MountBucketOutput> {\n\t\tconst parsed = mountBucketInputSchema.safeParse(input)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid sandbox mount input', {\n\t\t\t\tcode: 'bad_input',\n\t\t\t\tdetails: { issues: parsed.error.issues.map((issue) => issue.message) }\n\t\t\t})\n\t\t}\n\t\tconst data = parsed.data\n\t\tif (data.local_bucket && data.endpoint) {\n\t\t\tthrow new ToolError('local_bucket and endpoint are mutually exclusive on mount', { code: 'bad_input' })\n\t\t}\n\t\tif (data.prefix !== undefined && !data.prefix.startsWith('/')) {\n\t\t\tthrow new ToolError('mount prefix must start with /', { code: 'bad_input' })\n\t\t}\n\n\t\t// Endpoint mounts only: omit endpoint for Worker R2 binding mounts.\n\t\tconst endpoint = data.local_bucket ? undefined : data.endpoint\n\t\t// Credentials: explicit input, else auth.storage when doing an endpoint mount (Mastra S3 FS).\n\t\tconst accessKeyId = data.access_key_id ?? (endpoint !== undefined ? this.#storageAuth?.access_key_id : undefined)\n\t\tconst secretAccessKey =\n\t\t\tdata.secret_access_key ?? (endpoint !== undefined ? this.#storageAuth?.secret_access_key : undefined)\n\n\t\tconst options: Record<string, unknown> = {}\n\t\tif (endpoint) options['endpoint'] = endpoint\n\t\tif (data.provider) options['provider'] = data.provider\n\t\tif (data.read_only !== undefined) options['readOnly'] = data.read_only\n\t\tif (data.prefix) options['prefix'] = data.prefix\n\t\tif (data.credential_proxy !== undefined) options['credentialProxy'] = data.credential_proxy\n\t\tif (data.local_bucket) options['localBucket'] = true\n\t\tif (data.s3fs_options && data.s3fs_options.length > 0) options['s3fsOptions'] = data.s3fs_options\n\t\tif (endpoint && accessKeyId && secretAccessKey) {\n\t\t\toptions['credentials'] = {\n\t\t\t\taccessKeyId,\n\t\t\t\tsecretAccessKey\n\t\t\t}\n\t\t}\n\n\t\tconst body: Record<string, unknown> = {\n\t\t\tmountPath: data.mount_path,\n\t\t\toptions\n\t\t}\n\t\tif (endpoint) body['bucket'] = data.bucket\n\t\telse body['binding'] = data.bucket\n\n\t\tawait this.#http.post(`/v1/sandbox/${encodeURIComponent(data.sandbox_id)}/mount`, body, {\n\t\t\tlabel: 'Cloudflare Sandbox mount'\n\t\t})\n\t\treturn {\n\t\t\tsandbox_id: data.sandbox_id,\n\t\t\tbucket: data.bucket,\n\t\t\tmount_path: data.mount_path,\n\t\t\tok: true\n\t\t}\n\t}\n\n\t/**\n\t * Unmount a previously mounted bucket path.\n\t * Bridge: `POST /v1/sandbox/:id/unmount` with `{ mountPath }`.\n\t * Mounts are also cleared when the sandbox is destroyed.\n\t */\n\tasync unmount(input: UnmountBucketInput): Promise<UnmountBucketOutput> {\n\t\tconst parsed = unmountBucketInputSchema.safeParse(input)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid sandbox unmount input', {\n\t\t\t\tcode: 'bad_input',\n\t\t\t\tdetails: { issues: parsed.error.issues.map((issue) => issue.message) }\n\t\t\t})\n\t\t}\n\t\tconst data = parsed.data\n\t\tawait this.#http.post(\n\t\t\t`/v1/sandbox/${encodeURIComponent(data.sandbox_id)}/unmount`,\n\t\t\t{ mountPath: data.mount_path },\n\t\t\t{ label: 'Cloudflare Sandbox unmount' }\n\t\t)\n\t\treturn {\n\t\t\tsandbox_id: data.sandbox_id,\n\t\t\tmount_path: data.mount_path,\n\t\t\tok: true\n\t\t}\n\t}\n\n\t#requireStorage(op: string): S3Client {\n\t\tif (!this.#storage) {\n\t\t\tthrow new ToolError(`${op} requires storage credentials on sandbox auth`, {\n\t\t\t\tcode: 'bad_auth'\n\t\t\t})\n\t\t}\n\t\treturn this.#storage\n\t}\n\n\tasync #putFileBytes(\n\t\tsandboxId: string,\n\t\tpath: string,\n\t\tbytes: Uint8Array,\n\t\tsessionId: string | undefined\n\t): Promise<void> {\n\t\tconst key = workspaceFileKey(path)\n\t\tconst headers: Record<string, string> = {\n\t\t\t'Content-Type': 'application/octet-stream'\n\t\t}\n\t\tif (sessionId) headers['Session-Id'] = sessionId\n\t\tconst { data } = await this.#http.put(\n\t\t\t`/v1/sandbox/${encodeURIComponent(sandboxId)}/file/${key.split('/').map(encodeURIComponent).join('/')}`,\n\t\t\ttoArrayBuffer(bytes),\n\t\t\t{ headers, label: 'Cloudflare Sandbox writeFile' }\n\t\t)\n\t\tif (isPlainObject(data) && data['ok'] === false) {\n\t\t\tthrow new ToolError('Sandbox writeFile failed', { code: 'upstream' })\n\t\t}\n\t}\n\n\tasync #getFileBytes(sandboxId: string, path: string, sessionId: string | undefined): Promise<Uint8Array> {\n\t\tconst key = workspaceFileKey(path)\n\t\tconst headers: Record<string, string> = {}\n\t\tif (sessionId) headers['Session-Id'] = sessionId\n\t\tconst { bytes } = await this.#http.bytes(\n\t\t\t'GET',\n\t\t\t`/v1/sandbox/${encodeURIComponent(sandboxId)}/file/${key.split('/').map(encodeURIComponent).join('/')}`,\n\t\t\t{ headers, label: 'Cloudflare Sandbox readFile', maxBytes: MAX_FILE_BYTES }\n\t\t)\n\t\treturn bytes\n\t}\n}\n","import { z } from 'zod'\n\nimport { defineModule, defineTool } from '../../core/define'\nimport { CloudflareSandboxClient } from './client'\nimport {\n\tcloudflareSandboxAuthSchema,\n\tcreateBridgeSessionOutputSchema,\n\tcreateSandboxOutputSchema,\n\tdeleteBridgeSessionInputSchema,\n\tdeleteBridgeSessionOutputSchema,\n\tdestroySandboxOutputSchema,\n\texecInputSchema,\n\texecOutputSchema,\n\texecuteCodeInputSchema,\n\texportArtifactInputSchema,\n\texportArtifactOutputSchema,\n\thealthOutputSchema,\n\timportArtifactInputSchema,\n\timportArtifactOutputSchema,\n\tlistFilesInputSchema,\n\tlistFilesOutputSchema,\n\treadFileInputSchema,\n\treadFileOutputSchema,\n\treadFilesInputSchema,\n\treadFilesOutputSchema,\n\tremoveFilesInputSchema,\n\tremoveFilesOutputSchema,\n\trunningOutputSchema,\n\tsandboxIdInputSchema,\n\twriteFileInputSchema,\n\twriteFileOutputSchema,\n\twriteFilesInputSchema,\n\twriteFilesOutputSchema\n} from './contracts'\n\nconst id = 'cloudflare-sandbox'\nconst emptyInputSchema = z.object({})\n\nexport const cloudflareSandboxHealthTool = defineTool({\n\tid: `${id}-health`,\n\tname: 'cloudflareSandboxHealth',\n\tdescription:\n\t\t'Check whether the Cloudflare Sandbox bridge is reachable. Use only for explicit availability diagnostics; ordinary sandbox work should begin with cloudflare-sandbox-create.',\n\tinputSchema: emptyInputSchema,\n\toutputSchema: healthOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (_input, ctx) => CloudflareSandboxClient.fromContext(ctx).health()\n})\n\nexport const cloudflareSandboxCreateTool = defineTool({\n\tid: `${id}-create`,\n\tname: 'cloudflareSandboxCreate',\n\tdescription:\n\t\t'Create an isolated Cloudflare sandbox and return sandbox_id. Use only when arbitrary code, commands, or temporary files are required and no purpose-built tool covers the task. Do not create a sandbox to build or edit supported deliverables.',\n\tinputSchema: emptyInputSchema,\n\toutputSchema: createSandboxOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (_input, ctx) => CloudflareSandboxClient.fromContext(ctx).create()\n})\n\nexport const cloudflareSandboxDestroyTool = defineTool({\n\tid: `${id}-destroy`,\n\tname: 'cloudflareSandboxDestroy',\n\tdescription:\n\t\t'Destroy a Cloudflare sandbox by sandbox_id and release its temporary files and resources. Call after the sandbox workflow is complete and any required output file has been exported.',\n\tinputSchema: sandboxIdInputSchema,\n\toutputSchema: destroySandboxOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).destroy(input)\n})\n\nexport const cloudflareSandboxRunningTool = defineTool({\n\tid: `${id}-running`,\n\tname: 'cloudflareSandboxRunning',\n\tdescription:\n\t\t'Check whether a Cloudflare sandbox is currently running. Use before continuing work on an existing sandbox_id; this does not execute code or inspect files.',\n\tinputSchema: sandboxIdInputSchema,\n\toutputSchema: runningOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).running(input)\n})\n\nexport const cloudflareSandboxExecTool = defineTool({\n\tid: `${id}-exec`,\n\tname: 'cloudflareSandboxExec',\n\tdescription:\n\t\t'One-shot argv exec in a Cloudflare sandbox (stdout/stderr/exit_code). Prefer a host workspace agent for multi-step shell; use tools for workflow one-shots. Optional env when the bridge supports it.',\n\tinputSchema: execInputSchema,\n\toutputSchema: execOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\ttags: ['exec', 'one-shot', 'compute'],\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).exec(input)\n})\n\nexport const cloudflareSandboxExecuteCodeTool = defineTool({\n\tid: `${id}-execute-code`,\n\tname: 'cloudflareSandboxExecuteCode',\n\tdescription:\n\t\t'Execute Python, JavaScript, or shell source in a Cloudflare sandbox. Use as a fallback for computation or automation with no dedicated tool. Do not generate or edit supported documents, spreadsheets, presentations, PDFs, or images here when a purpose-built tool is available.',\n\tinputSchema: executeCodeInputSchema,\n\toutputSchema: execOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).executeCode(input)\n})\n\nexport const cloudflareSandboxWriteFileTool = defineTool({\n\tid: `${id}-write-file`,\n\tname: 'cloudflareSandboxWriteFile',\n\tdescription:\n\t\t'Write one temporary file under the Cloudflare sandbox workspace from UTF-8 text or base64 bytes, up to 32 MiB decoded. Use for sandbox intermediates. This is not durable delivery; export a genuinely sandbox-produced final file with cloudflare-sandbox-export-artifact.',\n\tinputSchema: writeFileInputSchema,\n\toutputSchema: writeFileOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).writeFile(input)\n})\n\nexport const cloudflareSandboxReadFileTool = defineTool({\n\tid: `${id}-read-file`,\n\tname: 'cloudflareSandboxReadFile',\n\tdescription:\n\t\t'Read one temporary file from the Cloudflare sandbox workspace as UTF-8 or base64. Use for sandbox intermediates; use format-aware readers for supported ArtifactRefs.',\n\tinputSchema: readFileInputSchema,\n\toutputSchema: readFileOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).readFile(input)\n})\n\nexport const cloudflareSandboxWriteFilesTool = defineTool({\n\tid: `${id}-write-files`,\n\tname: 'cloudflareSandboxWriteFiles',\n\tdescription:\n\t\t'Write multiple temporary files under the Cloudflare sandbox workspace from text or base64. Use for sandbox intermediates, not final document generation. Export only a final file that the sandbox genuinely had to produce.',\n\tinputSchema: writeFilesInputSchema,\n\toutputSchema: writeFilesOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).writeFiles(input)\n})\n\nexport const cloudflareSandboxReadFilesTool = defineTool({\n\tid: `${id}-read-files`,\n\tname: 'cloudflareSandboxReadFiles',\n\tdescription:\n\t\t'Read multiple temporary files from the Cloudflare sandbox workspace as UTF-8 or base64. Use only within an active sandbox workflow; use format-aware readers for supported ArtifactRefs.',\n\tinputSchema: readFilesInputSchema,\n\toutputSchema: readFilesOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).readFiles(input)\n})\n\nexport const cloudflareSandboxListFilesTool = defineTool({\n\tid: `${id}-list-files`,\n\tname: 'cloudflareSandboxListFiles',\n\tdescription:\n\t\t'List temporary files under a Cloudflare sandbox directory, defaulting to /workspace. Use to locate sandbox intermediates, not durable workspace files or ArtifactRefs.',\n\tinputSchema: listFilesInputSchema,\n\toutputSchema: listFilesOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).listFiles(input)\n})\n\nexport const cloudflareSandboxRemoveFilesTool = defineTool({\n\tid: `${id}-remove-files`,\n\tname: 'cloudflareSandboxRemoveFiles',\n\tdescription:\n\t\t'Remove temporary files from the Cloudflare sandbox workspace by path. Use only for sandbox cleanup; this does not delete durable workspace files or ArtifactRefs.',\n\tinputSchema: removeFilesInputSchema,\n\toutputSchema: removeFilesOutputSchema,\n\tsideEffect: 'delete',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).removeFiles(input)\n})\n\nexport const cloudflareSandboxImportArtifactTool = defineTool({\n\tid: `${id}-import-artifact`,\n\tname: 'cloudflareSandboxImportArtifact',\n\tdescription:\n\t\t'Copy an existing object-store ArtifactRef into a Cloudflare sandbox workspace. Use only when arbitrary sandbox computation must consume that file. Do not import a supported document merely to read or edit it with general code.',\n\tinputSchema: importArtifactInputSchema,\n\toutputSchema: importArtifactOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).importArtifact(input)\n})\n\nexport const cloudflareSandboxExportArtifactTool = defineTool({\n\tid: `${id}-export-artifact`,\n\tname: 'cloudflareSandboxExportArtifact',\n\tdescription:\n\t\t'Persist a final file that was genuinely created inside the Cloudflare sandbox and return its ArtifactRef for delivery. Use only after sandbox work. Do not call for files returned by document, presentation, PDF, image, render, or conversion tools; those ArtifactRefs are already final.',\n\tinputSchema: exportArtifactInputSchema,\n\toutputSchema: exportArtifactOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).exportArtifact(input)\n})\n\nexport const cloudflareSandboxCreateSessionTool = defineTool({\n\tid: `${id}-create-session`,\n\tname: 'cloudflareSandboxCreateSession',\n\tdescription:\n\t\t'Create an isolated execution session inside an existing Cloudflare sandbox and return session_id. Use only when separate working directories or runtime state are needed; pass the id to later command and file calls.',\n\tinputSchema: sandboxIdInputSchema,\n\toutputSchema: createBridgeSessionOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).createSession(input)\n})\n\nexport const cloudflareSandboxDeleteSessionTool = defineTool({\n\tid: `${id}-delete-session`,\n\tname: 'cloudflareSandboxDeleteSession',\n\tdescription:\n\t\t'Delete an isolated execution session inside a Cloudflare sandbox. Use after session-specific work is complete; this does not destroy the parent sandbox.',\n\tinputSchema: deleteBridgeSessionInputSchema,\n\toutputSchema: deleteBridgeSessionOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareSandboxClient.fromContext(ctx).deleteSession(input)\n})\n\nexport const cloudflareSandboxModule = defineModule({\n\tid,\n\ttitle: 'Cloudflare Sandbox',\n\tdescription:\n\t\t'Cloudflare sandbox bridge: one-shot exec/files/sessions for workflows. Prefer a host workspace agent for multi-step shell. Client export remains first-class for Workspace hybrids. Prefer purpose-built document tools over sandbox for office formats.',\n\truntime: 'both',\n\tauth: { type: 'custom', schema: cloudflareSandboxAuthSchema },\n\tcategories: ['compute', 'sandbox', 'cloudflare'],\n\tclassification: 'standard',\n\ttags: ['exec', 'workspace', 'bridge'],\n\ttools: [\n\t\tcloudflareSandboxHealthTool,\n\t\tcloudflareSandboxCreateTool,\n\t\tcloudflareSandboxDestroyTool,\n\t\tcloudflareSandboxRunningTool,\n\t\tcloudflareSandboxExecTool,\n\t\tcloudflareSandboxExecuteCodeTool,\n\t\tcloudflareSandboxWriteFileTool,\n\t\tcloudflareSandboxReadFileTool,\n\t\tcloudflareSandboxWriteFilesTool,\n\t\tcloudflareSandboxReadFilesTool,\n\t\tcloudflareSandboxListFilesTool,\n\t\tcloudflareSandboxRemoveFilesTool,\n\t\tcloudflareSandboxImportArtifactTool,\n\t\tcloudflareSandboxExportArtifactTool,\n\t\tcloudflareSandboxCreateSessionTool,\n\t\tcloudflareSandboxDeleteSessionTool\n\t]\n})\n"],"mappings":"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"}
@@ -70,8 +70,6 @@ declare const artifactsReadLinesInputSchema: z.ZodObject<{
70
70
  filename: z.ZodOptional<z.ZodString>;
71
71
  byte_length: z.ZodOptional<z.ZodInt>;
72
72
  }, z.core.$strip>;
73
- start_line: z.ZodInt;
74
- end_line: z.ZodInt;
75
73
  }, z.core.$strip>;
76
74
  declare const artifactsReadLinesOutputSchema: z.ZodObject<{
77
75
  source: z.ZodObject<{
@@ -276,8 +274,6 @@ declare const artifactsReadLinesTool: ToolDefinition<{
276
274
  filename?: string | undefined;
277
275
  byte_length?: number | undefined;
278
276
  };
279
- start_line: number;
280
- end_line: number;
281
277
  }, {
282
278
  source: {
283
279
  store: "host" | "object";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/modules/artifacts/contracts.ts","../../../src/modules/artifacts/client.ts","../../../src/modules/artifacts/module.ts","../../../src/modules/artifacts/providers/host.ts","../../../src/modules/artifacts/providers/object.ts"],"mappings":";;;;;cAWa;cACA;cACA;cAEA,4BAA0B,EAAA;;;;;;;;;GAMrC,EAAA,KAAA;cAEW,6BAA2B,EAAA;;;;;;;;;;;GAEtC,EAAA,KAAA;cAEW,+BAA6B,EAAA;;;;;;;;;;;;;GAsBvC,EAAA,KAAA;cAEU,gCAA8B,EAAA;;;;;;;;;;;;;;;;GAOzC,EAAA,KAAA;cAEW,+BAA6B,EAAA;;;;;;;;;;;;;GASvC,EAAA,KAAA;cAEU,gCAA8B,EAAA;;;;;;;;;;;;;;;GAMzC,EAAA,KAAA;cAEW,4BAA0B,EAAA;;;;;;;;;;;;GAGrC,EAAA,KAAA;cAEW,wBAAsB,EAAA;;;;;;;;;;;;GAGjC,EAAA,KAAA;KAEU,uBAAuB,EAAE,aAAa;KACtC,wBAAwB,EAAE,aAAa;KACvC,0BAA0B,EAAE,aAAa;KACzC,2BAA2B,EAAE,aAAa;KAC1C,0BAA0B,EAAE,aAAa;KACzC,2BAA2B,EAAE,aAAa;KAC1C,uBAAuB,EAAE,aAAa;KACtC,mBAAmB,EAAE,aAAa;KAElC;EACX,OAAO,OAAO,uBAAuB,QAAQ;EAC7C,UAAU,OAAO,0BAA0B,QAAQ;EACnD,UAAU,OAAO,0BAA0B,QAAQ;;KAGxC;EACX,QAAQ,OAAO,uBAAuB,QAAQ;;KAGnC,qBAAqB,eAAe;cAEnC,wBAAsB,EAAA;EAXpB,QAAA,EAAA,WAAA,OAAA,yBAAuB,QAAQ,yBAAsB,OAAA,yBAAA,QAAA;EAClD,WAAA,EAAA,WAAA,OAAA,4BAA0B,QAAQ,4BAAyB,OAAA,4BAAA,QAAA;EAC3D,WAAA,EAAA,WAAA,OAAA,4BAA0B,QAAQ,4BAAyB,OAAA,4BAAA,QAAA;EAI7D,SAAA,EAAA,YAAA,EAAA,WAAA,OAAA,yBAAuB,QAAQ,oBAAiB,OAAA,yBAAA,QAAA;GAU9D,EAAA,KAAA;cAEW,2BAAyB,EAAA;;;;;;;;;;;GAGpC,EAAA,KAAA;cAEW,yBAAuB,EAAA;;;IAvBrB,QAAA,EAAA,WAAA,OAAA,yBAAuB,QAAQ,yBAAsB,OAAA,yBAAA,QAAA;IAClD,WAAA,EAAA,WAAA,OAAA,4BAA0B,QAAQ,4BAAyB,OAAA,4BAAA,QAAA;IAC3D,WAAA,EAAA,WAAA,OAAA,4BAA0B,QAAQ,4BAAyB,OAAA,4BAAA,QAAA;IAI7D,SAAA,EAAA,YAAA,EAAA,WAAA,OAAA,yBAAuB,QAAQ,oBAAiB,OAAA,yBAAA,QAAA;;GAoB9D,EAAA,KAAA;cAEW,qBAAmB,EAAA,uBAAA,EAAA;;;;;;;;;;;;;;IA5BjB,QAAA,EAAA,WAAA,OAAA,yBAAuB,QAAQ,yBAAsB,OAAA,yBAAA,QAAA;IAClD,WAAA,EAAA,WAAA,OAAA,4BAA0B,QAAQ,4BAAyB,OAAA,4BAAA,QAAA;IAC3D,WAAA,EAAA,WAAA,OAAA,4BAA0B,QAAQ,4BAAyB,OAAA,4BAAA,QAAA;IAI7D,SAAA,EAAA,YAAA,EAAA,WAAA,OAAA,yBAAuB,QAAQ,oBAAiB,OAAA,yBAAA,QAAA;;GAyB9D,EAAA,KAAA;KAEU,gBAAgB,EAAE,aAAa;KAC/B,sBAAsB,EAAE,aAAa;KACrC,oBAAoB,EAAE,aAAa;;;cCtGlC,2BAA2B;;EAGvC,YAAY,KAAK;SAIV,YAAY,KAAK,cAAc;SAK/B,SAAS,MAAM,eAAe,MAAK,cAAmB;EAI7D,OAAO,OAAO,uBAAoB;;;;;;;;;EAIlC,UAAU,OAAO,0BAAuB;;;;;;;;;;;;;;EAIxC,UAAU,OAAO,0BAAuB;;;;;;;;;;;;;EAIlC,QAAQ,OAAO,uBAAuB,QAAQ;;;;cChDxC,qBAAA;;;;;;;;;;;;;;;cAYA,wBAAA;;;;;;;;;;;;;;;;;;;;;;;;cAYA,wBAAA;;;;;;;;;;;;;;;;;;;;;;;cAYA;;;;;;;;;;;;;;oBAAA;;;;;;;;cCpBA,iCAAiC;;EAG7C,YAAY,MAAM;EAIZ,OAAO,OAAO,uBAAuB,QAAQ;EAM7C,UAAU,OAAO,0BAA0B,QAAQ;EAKnD,UAAU,OAAO,0BAA0B,QAAQ;EAKnD,QAAQ,OAAO,uBAAuB,QAAQ;;;;KC/BzC,iCAAiC,KAAK;cAyBrC,mCAAmC;;EAG/C,YAAY,MAAM,qBAAqB,UAAS;EAI1C,OAAO,OAAO,uBAAuB,QAAQ;EAe7C,UAAU,OAAO,0BAA0B,QAAQ;EAgBnD,UAAU,OAAO,0BAA0B,QAAQ;EAoBnD,QAAQ,OAAO,uBAAuB,QAAQ"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/modules/artifacts/contracts.ts","../../../src/modules/artifacts/client.ts","../../../src/modules/artifacts/module.ts","../../../src/modules/artifacts/providers/host.ts","../../../src/modules/artifacts/providers/object.ts"],"mappings":"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"}
@@ -9,7 +9,7 @@ import { isFunction } from "es-toolkit";
9
9
  import { z } from "zod";
10
10
  //#region src/modules/artifacts/contracts.ts
11
11
  /**
12
- * ArtifactRef creation and bounded read contracts.
12
+ * ArtifactRef creation and read contracts.
13
13
  * Host-mapped and object-store backends share the same model-facing verbs.
14
14
  */
15
15
  const MAX_ARTIFACT_READ_BYTES = MAX_OBJECT_BYTES;
@@ -48,17 +48,10 @@ const artifactsReadRangeOutputSchema = z.object({
48
48
  total_bytes: z.int().min(0).optional(),
49
49
  media_type: z.string().optional()
50
50
  });
51
- const artifactsReadLinesInputSchema = z.object({
52
- source: artifactRefSchema.describe("UTF-8 text artifact to read"),
53
- start_line: z.int().min(1).describe("Inclusive one-based start line"),
54
- end_line: z.int().min(1).describe("Inclusive one-based end line")
55
- }).refine((input) => input.end_line >= input.start_line, {
56
- path: ["end_line"],
57
- message: "end_line must be greater than or equal to start_line"
58
- });
51
+ const artifactsReadLinesInputSchema = z.object({ source: artifactRefSchema.describe("UTF-8 text artifact to read") });
59
52
  const artifactsReadLinesOutputSchema = z.object({
60
53
  source: artifactRefSchema,
61
- text: z.string().describe("Selected UTF-8 lines"),
54
+ text: z.string().describe("Complete UTF-8 text content"),
62
55
  start_line: z.int().min(1),
63
56
  end_line: z.int().min(1),
64
57
  total_lines: z.int().min(0)
@@ -193,19 +186,11 @@ var ObjectArtifactsProvider = class {
193
186
  async readLines(input) {
194
187
  requireObjectSource(input.source.store);
195
188
  const lines = textLines(bytesToUtf8(await this.#storage.getBytes(input.source.key, { maxBytes: MAX_ARTIFACT_READ_BYTES })));
196
- if (input.start_line > lines.length) throw new ToolError("start_line is beyond the end of the artifact", {
197
- code: "bad_input",
198
- details: {
199
- start_line: input.start_line,
200
- total_lines: lines.length
201
- }
202
- });
203
- const selected = lines.slice(input.start_line - 1, input.end_line);
204
189
  return {
205
190
  source: input.source,
206
- text: selected.join("\n"),
207
- start_line: input.start_line,
208
- end_line: input.start_line + selected.length - 1,
191
+ text: lines.join("\n"),
192
+ start_line: 1,
193
+ end_line: lines.length,
209
194
  total_lines: lines.length
210
195
  };
211
196
  }
@@ -317,7 +302,7 @@ const artifactsReadRangeTool = defineTool({
317
302
  const artifactsReadLinesTool = defineTool({
318
303
  id: "artifacts-read-lines",
319
304
  name: "readArtifactLines",
320
- description: "Read an explicit inclusive line range from a UTF-8 text artifact. Use for bounded inspection instead of loading the whole file into context.",
305
+ description: "Read the complete contents of a UTF-8 text artifact, bounded by the artifact read-size limit.",
321
306
  inputSchema: artifactsReadLinesInputSchema,
322
307
  outputSchema: artifactsReadLinesOutputSchema,
323
308
  sideEffect: "read",
@@ -327,7 +312,7 @@ const artifactsReadLinesTool = defineTool({
327
312
  const artifactsModule = defineModule({
328
313
  id: "artifacts",
329
314
  title: "Artifacts",
330
- description: "Persist small serialized content and inspect bounded byte or text ranges. ArtifactRef is the handoff between tools; structured document creation belongs to purpose-built builders.",
315
+ description: "Persist small serialized content, inspect bounded byte ranges, and read UTF-8 text artifacts. ArtifactRef is the handoff between tools; structured document creation belongs to purpose-built builders.",
331
316
  runtime: "both",
332
317
  auth: {
333
318
  type: "custom",
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["#backend","#storage","#ops"],"sources":["../../../src/modules/artifacts/contracts.ts","../../../src/modules/artifacts/providers/host.ts","../../../src/modules/artifacts/providers/object.ts","../../../src/modules/artifacts/client.ts","../../../src/modules/artifacts/module.ts"],"sourcesContent":["/**\n * ArtifactRef creation and bounded read contracts.\n * Host-mapped and object-store backends share the same model-facing verbs.\n */\n\nimport { isFunction } from 'es-toolkit'\nimport { z } from 'zod'\n\nimport { artifactRefSchema } from '../../shared/artifact'\nimport { MAX_OBJECT_BYTES, s3AuthSchema } from '../../vendors/s3'\n\nexport const MAX_ARTIFACT_READ_BYTES = MAX_OBJECT_BYTES\nexport const MAX_ARTIFACT_CREATE_BYTES = MAX_OBJECT_BYTES\nexport const MAX_ARTIFACT_INLINE_CHARS = Math.ceil((MAX_ARTIFACT_CREATE_BYTES * 4) / 3) + 4\n\nexport const artifactsCreateInputSchema = z.object({\n\tkey: z.string().min(1).max(1_024).describe('Destination key for the new artifact'),\n\tbody: z.string().max(MAX_ARTIFACT_INLINE_CHARS).describe('Artifact body encoded as specified by encoding'),\n\tencoding: z.enum(['utf8', 'base64']).describe('How body is encoded'),\n\tmedia_type: z.string().min(1).max(200).optional().describe('MIME type when known'),\n\tfilename: z.string().min(1).max(512).optional().describe('Display filename when different from the key')\n})\n\nexport const artifactsCreateOutputSchema = z.object({\n\tartifact: artifactRefSchema.describe('Reference to the created artifact')\n})\n\nexport const artifactsReadRangeInputSchema = z\n\t.object({\n\t\tsource: artifactRefSchema.describe('Artifact to read'),\n\t\tstart_byte: z.int().min(0).describe('Inclusive zero-based start byte'),\n\t\tend_byte: z.int().min(0).describe('Inclusive zero-based end byte')\n\t})\n\t.superRefine((input, ctx) => {\n\t\tconst byteLength = input.end_byte - input.start_byte + 1\n\t\tif (byteLength < 1) {\n\t\t\tctx.addIssue({\n\t\t\t\tcode: 'custom',\n\t\t\t\tpath: ['end_byte'],\n\t\t\t\tmessage: 'end_byte must be greater than or equal to start_byte'\n\t\t\t})\n\t\t}\n\t\tif (byteLength > MAX_ARTIFACT_READ_BYTES) {\n\t\t\tctx.addIssue({\n\t\t\t\tcode: 'custom',\n\t\t\t\tpath: ['end_byte'],\n\t\t\t\tmessage: `Byte range cannot exceed ${MAX_ARTIFACT_READ_BYTES} bytes`\n\t\t\t})\n\t\t}\n\t})\n\nexport const artifactsReadRangeOutputSchema = z.object({\n\tsource: artifactRefSchema,\n\tbody_base64: z.string().describe('Requested bytes encoded as base64'),\n\tstart_byte: z.int().min(0),\n\tend_byte: z.int().min(0),\n\ttotal_bytes: z.int().min(0).optional(),\n\tmedia_type: z.string().optional()\n})\n\nexport const artifactsReadLinesInputSchema = z\n\t.object({\n\t\tsource: artifactRefSchema.describe('UTF-8 text artifact to read'),\n\t\tstart_line: z.int().min(1).describe('Inclusive one-based start line'),\n\t\tend_line: z.int().min(1).describe('Inclusive one-based end line')\n\t})\n\t.refine((input) => input.end_line >= input.start_line, {\n\t\tpath: ['end_line'],\n\t\tmessage: 'end_line must be greater than or equal to start_line'\n\t})\n\nexport const artifactsReadLinesOutputSchema = z.object({\n\tsource: artifactRefSchema,\n\ttext: z.string().describe('Selected UTF-8 lines'),\n\tstart_line: z.int().min(1),\n\tend_line: z.int().min(1),\n\ttotal_lines: z.int().min(0)\n})\n\nexport const artifactResolveInputSchema = z.object({\n\tsource: artifactRefSchema,\n\tmax_bytes: z.int().min(0)\n})\n\nexport const resolvedArtifactSchema = z.object({\n\tartifact: artifactRefSchema,\n\tbytes: z.custom<Uint8Array>((value) => value instanceof Uint8Array, 'bytes must be a Uint8Array')\n})\n\nexport type ArtifactsCreateInput = z.infer<typeof artifactsCreateInputSchema>\nexport type ArtifactsCreateOutput = z.infer<typeof artifactsCreateOutputSchema>\nexport type ArtifactsReadRangeInput = z.infer<typeof artifactsReadRangeInputSchema>\nexport type ArtifactsReadRangeOutput = z.infer<typeof artifactsReadRangeOutputSchema>\nexport type ArtifactsReadLinesInput = z.infer<typeof artifactsReadLinesInputSchema>\nexport type ArtifactsReadLinesOutput = z.infer<typeof artifactsReadLinesOutputSchema>\nexport type ArtifactResolveInput = z.infer<typeof artifactResolveInputSchema>\nexport type ResolvedArtifact = z.infer<typeof resolvedArtifactSchema>\n\nexport type ArtifactsOps = {\n\tcreate(input: ArtifactsCreateInput): Promise<ArtifactsCreateOutput>\n\treadRange(input: ArtifactsReadRangeInput): Promise<ArtifactsReadRangeOutput>\n\treadLines(input: ArtifactsReadLinesInput): Promise<ArtifactsReadLinesOutput>\n}\n\nexport type ArtifactResolverOps = {\n\tresolve(input: ArtifactResolveInput): Promise<ResolvedArtifact>\n}\n\nexport type ArtifactsClientOps = ArtifactsOps & ArtifactResolverOps\n\nexport const artifactsBackendSchema = z.object({\n\tcreate: z.custom<ArtifactsOps['create']>(isFunction, 'create must be a function'),\n\treadRange: z.custom<ArtifactsOps['readRange']>(isFunction, 'readRange must be a function'),\n\treadLines: z.custom<ArtifactsOps['readLines']>(isFunction, 'readLines must be a function'),\n\tresolve: z.custom<ArtifactResolverOps['resolve']>(isFunction, 'resolve must be a function').optional()\n})\n\nexport const objectArtifactsAuthSchema = z.object({\n\tprovider: z.literal('object'),\n\tstorage: s3AuthSchema.describe('S3-compatible object storage for ArtifactRef bytes')\n})\n\nexport const hostArtifactsAuthSchema = z.object({\n\tprovider: z.literal('host'),\n\tbackend: artifactsBackendSchema.describe('Host artifact operations for host-mapped ArtifactRefs')\n})\n\nexport const artifactsAuthSchema = z.discriminatedUnion('provider', [\n\tobjectArtifactsAuthSchema,\n\thostArtifactsAuthSchema\n])\n\nexport type ArtifactsAuth = z.infer<typeof artifactsAuthSchema>\nexport type ObjectArtifactsAuth = z.infer<typeof objectArtifactsAuthSchema>\nexport type HostArtifactsAuth = z.infer<typeof hostArtifactsAuthSchema>\n","import { ToolError } from '../../../core/errors'\nimport type {\n\tArtifactResolveInput,\n\tArtifactsClientOps,\n\tArtifactsCreateInput,\n\tArtifactsCreateOutput,\n\tArtifactsReadLinesInput,\n\tArtifactsReadLinesOutput,\n\tArtifactsReadRangeInput,\n\tArtifactsReadRangeOutput,\n\tHostArtifactsAuth,\n\tResolvedArtifact\n} from '../contracts'\nimport {\n\tartifactsCreateOutputSchema,\n\tartifactsReadLinesOutputSchema,\n\tartifactsReadRangeOutputSchema,\n\tresolvedArtifactSchema\n} from '../contracts'\n\nfunction requireHostStore(store: 'object' | 'host'): void {\n\tif (store !== 'host') {\n\t\tthrow new ToolError('The host artifact provider only resolves host-mapped references', {\n\t\t\tcode: 'unsupported'\n\t\t})\n\t}\n}\n\nexport class HostArtifactsProvider implements ArtifactsClientOps {\n\treadonly #backend: HostArtifactsAuth['backend']\n\n\tconstructor(auth: HostArtifactsAuth) {\n\t\tthis.#backend = auth.backend\n\t}\n\n\tasync create(input: ArtifactsCreateInput): Promise<ArtifactsCreateOutput> {\n\t\tconst output = artifactsCreateOutputSchema.parse(await this.#backend.create(input))\n\t\trequireHostStore(output.artifact.store)\n\t\treturn output\n\t}\n\n\tasync readRange(input: ArtifactsReadRangeInput): Promise<ArtifactsReadRangeOutput> {\n\t\trequireHostStore(input.source.store)\n\t\treturn artifactsReadRangeOutputSchema.parse(await this.#backend.readRange(input))\n\t}\n\n\tasync readLines(input: ArtifactsReadLinesInput): Promise<ArtifactsReadLinesOutput> {\n\t\trequireHostStore(input.source.store)\n\t\treturn artifactsReadLinesOutputSchema.parse(await this.#backend.readLines(input))\n\t}\n\n\tasync resolve(input: ArtifactResolveInput): Promise<ResolvedArtifact> {\n\t\trequireHostStore(input.source.store)\n\t\tif (input.source.byte_length !== undefined && input.source.byte_length > input.max_bytes) {\n\t\t\tthrow new ToolError('Artifact exceeds resolution limit', {\n\t\t\t\tcode: 'too_large',\n\t\t\t\tdetails: { max_bytes: input.max_bytes, content_length: input.source.byte_length }\n\t\t\t})\n\t\t}\n\t\tif (!this.#backend.resolve) {\n\t\t\tthrow new ToolError('The host artifact backend does not support byte resolution', {\n\t\t\t\tcode: 'unsupported'\n\t\t\t})\n\t\t}\n\n\t\tconst output = resolvedArtifactSchema.parse(await this.#backend.resolve(input))\n\t\trequireHostStore(output.artifact.store)\n\t\tif (output.artifact.key !== input.source.key) {\n\t\t\tthrow new ToolError('The host artifact backend resolved a different artifact', {\n\t\t\t\tcode: 'internal'\n\t\t\t})\n\t\t}\n\t\tif (output.bytes.byteLength > input.max_bytes) {\n\t\t\tthrow new ToolError('Artifact exceeds resolution limit', {\n\t\t\t\tcode: 'too_large',\n\t\t\t\tdetails: { max_bytes: input.max_bytes, content_length: output.bytes.byteLength }\n\t\t\t})\n\t\t}\n\t\treturn {\n\t\t\tartifact: {\n\t\t\t\t...input.source,\n\t\t\t\t...output.artifact,\n\t\t\t\tbyte_length: output.bytes.byteLength\n\t\t\t},\n\t\t\tbytes: output.bytes\n\t\t}\n\t}\n}\n","import { ToolError } from '../../../core/errors'\nimport { artifactRefSchema } from '../../../shared/artifact'\nimport { base64ToBytes, bytesToBase64, bytesToUtf8, utf8ToBytes } from '../../../shared/bytes'\nimport { mediaTypeFromPath } from '../../../shared/content-type'\nimport type { HttpServiceOptions } from '../../../transport/http-service'\nimport { S3Client } from '../../../vendors/s3'\nimport type {\n\tArtifactResolveInput,\n\tArtifactsClientOps,\n\tArtifactsCreateInput,\n\tArtifactsCreateOutput,\n\tArtifactsReadLinesInput,\n\tArtifactsReadLinesOutput,\n\tArtifactsReadRangeInput,\n\tArtifactsReadRangeOutput,\n\tObjectArtifactsAuth,\n\tResolvedArtifact\n} from '../contracts'\nimport { MAX_ARTIFACT_CREATE_BYTES, MAX_ARTIFACT_READ_BYTES } from '../contracts'\n\nexport type ObjectArtifactsProviderOptions = Pick<HttpServiceOptions, 'fetch' | 'signal'>\n\nfunction requireObjectSource(store: 'object' | 'host'): void {\n\tif (store !== 'object') {\n\t\tthrow new ToolError('The object artifact provider only resolves object-store references', {\n\t\t\tcode: 'unsupported'\n\t\t})\n\t}\n}\n\nfunction artifactBytes(input: ArtifactsCreateInput): Uint8Array {\n\tconst bytes = input.encoding === 'base64' ? base64ToBytes(input.body) : utf8ToBytes(input.body)\n\tif (bytes.byteLength > MAX_ARTIFACT_CREATE_BYTES) {\n\t\tthrow new ToolError('Artifact body exceeds create limit', {\n\t\t\tcode: 'too_large',\n\t\t\tdetails: { max_bytes: MAX_ARTIFACT_CREATE_BYTES, content_length: bytes.byteLength }\n\t\t})\n\t}\n\treturn bytes\n}\n\nfunction textLines(text: string): string[] {\n\treturn text.split('\\n').map((line) => (line.endsWith('\\r') ? line.slice(0, -1) : line))\n}\n\nexport class ObjectArtifactsProvider implements ArtifactsClientOps {\n\treadonly #storage: S3Client\n\n\tconstructor(auth: ObjectArtifactsAuth, options: ObjectArtifactsProviderOptions = {}) {\n\t\tthis.#storage = new S3Client(auth.storage, options)\n\t}\n\n\tasync create(input: ArtifactsCreateInput): Promise<ArtifactsCreateOutput> {\n\t\tconst bytes = artifactBytes(input)\n\t\tconst mediaType = input.media_type ?? mediaTypeFromPath(input.filename ?? input.key)\n\t\tawait this.#storage.putBytes(input.key, bytes, mediaType)\n\t\treturn {\n\t\t\tartifact: artifactRefSchema.parse({\n\t\t\t\tstore: 'object',\n\t\t\t\tkey: input.key,\n\t\t\t\tbyte_length: bytes.byteLength,\n\t\t\t\t...(mediaType && { media_type: mediaType }),\n\t\t\t\t...(input.filename && { filename: input.filename })\n\t\t\t})\n\t\t}\n\t}\n\n\tasync readRange(input: ArtifactsReadRangeInput): Promise<ArtifactsReadRangeOutput> {\n\t\trequireObjectSource(input.source.store)\n\t\tconst result = await this.#storage.getBytesRange(input.source.key, {\n\t\t\tstart_byte: input.start_byte,\n\t\t\tend_byte: input.end_byte\n\t\t})\n\t\treturn {\n\t\t\tsource: input.source,\n\t\t\tbody_base64: bytesToBase64(result.bytes),\n\t\t\tstart_byte: result.start_byte,\n\t\t\tend_byte: result.end_byte,\n\t\t\t...(result.total_bytes !== undefined && { total_bytes: result.total_bytes }),\n\t\t\t...(result.content_type && { media_type: result.content_type })\n\t\t}\n\t}\n\n\tasync readLines(input: ArtifactsReadLinesInput): Promise<ArtifactsReadLinesOutput> {\n\t\trequireObjectSource(input.source.store)\n\t\tconst bytes = await this.#storage.getBytes(input.source.key, { maxBytes: MAX_ARTIFACT_READ_BYTES })\n\t\tconst lines = textLines(bytesToUtf8(bytes))\n\t\tif (input.start_line > lines.length) {\n\t\t\tthrow new ToolError('start_line is beyond the end of the artifact', {\n\t\t\t\tcode: 'bad_input',\n\t\t\t\tdetails: { start_line: input.start_line, total_lines: lines.length }\n\t\t\t})\n\t\t}\n\t\tconst selected = lines.slice(input.start_line - 1, input.end_line)\n\t\treturn {\n\t\t\tsource: input.source,\n\t\t\ttext: selected.join('\\n'),\n\t\t\tstart_line: input.start_line,\n\t\t\tend_line: input.start_line + selected.length - 1,\n\t\t\ttotal_lines: lines.length\n\t\t}\n\t}\n\n\tasync resolve(input: ArtifactResolveInput): Promise<ResolvedArtifact> {\n\t\trequireObjectSource(input.source.store)\n\t\tif (input.source.byte_length !== undefined && input.source.byte_length > input.max_bytes) {\n\t\t\tthrow new ToolError('Artifact exceeds resolution limit', {\n\t\t\t\tcode: 'too_large',\n\t\t\t\tdetails: { max_bytes: input.max_bytes, content_length: input.source.byte_length }\n\t\t\t})\n\t\t}\n\n\t\tconst head = await this.#storage.head({ key: input.source.key })\n\t\tif (!head.exists) {\n\t\t\tthrow new ToolError('Artifact not found', { code: 'not_found' })\n\t\t}\n\t\tif (head.content_length !== undefined && head.content_length > input.max_bytes) {\n\t\t\tthrow new ToolError('Artifact exceeds resolution limit', {\n\t\t\t\tcode: 'too_large',\n\t\t\t\tdetails: { max_bytes: input.max_bytes, content_length: head.content_length }\n\t\t\t})\n\t\t}\n\n\t\tconst bytes = await this.#storage.getBytes(input.source.key, { maxBytes: input.max_bytes })\n\t\treturn {\n\t\t\tartifact: artifactRefSchema.parse({\n\t\t\t\t...input.source,\n\t\t\t\t...(!input.source.media_type && head.content_type && { media_type: head.content_type }),\n\t\t\t\tbyte_length: bytes.byteLength\n\t\t\t}),\n\t\t\tbytes\n\t\t}\n\t}\n}\n","import { ToolError } from '../../core/errors'\nimport { requireAuth } from '../../core/provider'\nimport type { ToolContext } from '../../core/types'\nimport type {\n\tArtifactResolveInput,\n\tArtifactsAuth,\n\tArtifactsClientOps,\n\tArtifactsCreateInput,\n\tArtifactsReadLinesInput,\n\tArtifactsReadRangeInput,\n\tResolvedArtifact\n} from './contracts'\nimport { artifactResolveInputSchema, artifactsAuthSchema, resolvedArtifactSchema } from './contracts'\nimport { HostArtifactsProvider } from './providers/host'\nimport { ObjectArtifactsProvider } from './providers/object'\n\nfunction transportOptions(ctx: ToolContext) {\n\treturn {\n\t\t...(ctx.fetch && { fetch: ctx.fetch }),\n\t\t...(ctx.signal && { signal: ctx.signal })\n\t}\n}\n\nfunction providerFor(auth: ArtifactsAuth, ctx: ToolContext): ArtifactsClientOps {\n\tswitch (auth.provider) {\n\t\tcase 'object':\n\t\t\treturn new ObjectArtifactsProvider(auth, transportOptions(ctx))\n\t\tcase 'host':\n\t\t\treturn new HostArtifactsProvider(auth)\n\t}\n}\n\nexport class ArtifactsClient implements ArtifactsClientOps {\n\treadonly #ops: ArtifactsClientOps\n\n\tconstructor(ops: ArtifactsClientOps) {\n\t\tthis.#ops = ops\n\t}\n\n\tstatic fromContext(ctx: ToolContext): ArtifactsClient {\n\t\tconst auth = requireAuth(ctx, artifactsAuthSchema)\n\t\treturn new ArtifactsClient(providerFor(auth, ctx))\n\t}\n\n\tstatic fromAuth(auth: ArtifactsAuth, ctx: ToolContext = {}): ArtifactsClient {\n\t\treturn new ArtifactsClient(providerFor(auth, ctx))\n\t}\n\n\tcreate(input: ArtifactsCreateInput) {\n\t\treturn this.#ops.create(input)\n\t}\n\n\treadRange(input: ArtifactsReadRangeInput) {\n\t\treturn this.#ops.readRange(input)\n\t}\n\n\treadLines(input: ArtifactsReadLinesInput) {\n\t\treturn this.#ops.readLines(input)\n\t}\n\n\tasync resolve(input: ArtifactResolveInput): Promise<ResolvedArtifact> {\n\t\tconst parsedInput = artifactResolveInputSchema.parse(input)\n\t\tconst output = resolvedArtifactSchema.parse(await this.#ops.resolve(parsedInput))\n\t\tif (output.bytes.byteLength > parsedInput.max_bytes) {\n\t\t\tthrow new ToolError('Artifact exceeds resolution limit', {\n\t\t\t\tcode: 'too_large',\n\t\t\t\tdetails: { max_bytes: parsedInput.max_bytes, content_length: output.bytes.byteLength }\n\t\t\t})\n\t\t}\n\t\treturn {\n\t\t\tartifact: {\n\t\t\t\t...output.artifact,\n\t\t\t\tbyte_length: output.bytes.byteLength\n\t\t\t},\n\t\t\tbytes: output.bytes\n\t\t}\n\t}\n}\n","import { defineModule, defineTool } from '../../core/define'\nimport { ArtifactsClient } from './client'\nimport {\n\tartifactsAuthSchema,\n\tartifactsCreateInputSchema,\n\tartifactsCreateOutputSchema,\n\tartifactsReadLinesInputSchema,\n\tartifactsReadLinesOutputSchema,\n\tartifactsReadRangeInputSchema,\n\tartifactsReadRangeOutputSchema\n} from './contracts'\n\nexport const artifactsCreateTool = defineTool({\n\tid: 'artifacts-create',\n\tname: 'createArtifact',\n\tdescription:\n\t\t'Persist small, already-serialized UTF-8 or base64 content and return its ArtifactRef. Use for raw bytes or text when no structured builder is required. Do not use this to invent DOCX, XLSX, PPTX, PDF, or image formats.',\n\tinputSchema: artifactsCreateInputSchema,\n\toutputSchema: artifactsCreateOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => ArtifactsClient.fromContext(ctx).create(input)\n})\n\nexport const artifactsReadRangeTool = defineTool({\n\tid: 'artifacts-read-range',\n\tname: 'readArtifactRange',\n\tdescription:\n\t\t'Read an explicit inclusive byte range from an existing ArtifactRef as base64. Use for bounded binary inspection or chunked transfer, not for understanding a supported document when a format-aware reader is available.',\n\tinputSchema: artifactsReadRangeInputSchema,\n\toutputSchema: artifactsReadRangeOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\texecute: async (input, ctx) => ArtifactsClient.fromContext(ctx).readRange(input)\n})\n\nexport const artifactsReadLinesTool = defineTool({\n\tid: 'artifacts-read-lines',\n\tname: 'readArtifactLines',\n\tdescription:\n\t\t'Read an explicit inclusive line range from a UTF-8 text artifact. Use for bounded inspection instead of loading the whole file into context.',\n\tinputSchema: artifactsReadLinesInputSchema,\n\toutputSchema: artifactsReadLinesOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\texecute: async (input, ctx) => ArtifactsClient.fromContext(ctx).readLines(input)\n})\n\nexport const artifactsModule = defineModule({\n\tid: 'artifacts',\n\ttitle: 'Artifacts',\n\tdescription:\n\t\t'Persist small serialized content and inspect bounded byte or text ranges. ArtifactRef is the handoff between tools; structured document creation belongs to purpose-built builders.',\n\truntime: 'both',\n\tauth: { type: 'custom', schema: artifactsAuthSchema },\n\tcategories: ['storage', 'artifacts'],\n\tclassification: 'pii',\n\ttags: ['artifact-ref', 'object-store'],\n\ttools: [artifactsCreateTool, artifactsReadRangeTool, artifactsReadLinesTool]\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["#backend","#storage","#ops"],"sources":["../../../src/modules/artifacts/contracts.ts","../../../src/modules/artifacts/providers/host.ts","../../../src/modules/artifacts/providers/object.ts","../../../src/modules/artifacts/client.ts","../../../src/modules/artifacts/module.ts"],"sourcesContent":["/**\n * ArtifactRef creation and read contracts.\n * Host-mapped and object-store backends share the same model-facing verbs.\n */\n\nimport { isFunction } from 'es-toolkit'\nimport { z } from 'zod'\n\nimport { artifactRefSchema } from '../../shared/artifact'\nimport { MAX_OBJECT_BYTES, s3AuthSchema } from '../../vendors/s3'\n\nexport const MAX_ARTIFACT_READ_BYTES = MAX_OBJECT_BYTES\nexport const MAX_ARTIFACT_CREATE_BYTES = MAX_OBJECT_BYTES\nexport const MAX_ARTIFACT_INLINE_CHARS = Math.ceil((MAX_ARTIFACT_CREATE_BYTES * 4) / 3) + 4\n\nexport const artifactsCreateInputSchema = z.object({\n\tkey: z.string().min(1).max(1_024).describe('Destination key for the new artifact'),\n\tbody: z.string().max(MAX_ARTIFACT_INLINE_CHARS).describe('Artifact body encoded as specified by encoding'),\n\tencoding: z.enum(['utf8', 'base64']).describe('How body is encoded'),\n\tmedia_type: z.string().min(1).max(200).optional().describe('MIME type when known'),\n\tfilename: z.string().min(1).max(512).optional().describe('Display filename when different from the key')\n})\n\nexport const artifactsCreateOutputSchema = z.object({\n\tartifact: artifactRefSchema.describe('Reference to the created artifact')\n})\n\nexport const artifactsReadRangeInputSchema = z\n\t.object({\n\t\tsource: artifactRefSchema.describe('Artifact to read'),\n\t\tstart_byte: z.int().min(0).describe('Inclusive zero-based start byte'),\n\t\tend_byte: z.int().min(0).describe('Inclusive zero-based end byte')\n\t})\n\t.superRefine((input, ctx) => {\n\t\tconst byteLength = input.end_byte - input.start_byte + 1\n\t\tif (byteLength < 1) {\n\t\t\tctx.addIssue({\n\t\t\t\tcode: 'custom',\n\t\t\t\tpath: ['end_byte'],\n\t\t\t\tmessage: 'end_byte must be greater than or equal to start_byte'\n\t\t\t})\n\t\t}\n\t\tif (byteLength > MAX_ARTIFACT_READ_BYTES) {\n\t\t\tctx.addIssue({\n\t\t\t\tcode: 'custom',\n\t\t\t\tpath: ['end_byte'],\n\t\t\t\tmessage: `Byte range cannot exceed ${MAX_ARTIFACT_READ_BYTES} bytes`\n\t\t\t})\n\t\t}\n\t})\n\nexport const artifactsReadRangeOutputSchema = z.object({\n\tsource: artifactRefSchema,\n\tbody_base64: z.string().describe('Requested bytes encoded as base64'),\n\tstart_byte: z.int().min(0),\n\tend_byte: z.int().min(0),\n\ttotal_bytes: z.int().min(0).optional(),\n\tmedia_type: z.string().optional()\n})\n\nexport const artifactsReadLinesInputSchema = z.object({\n\tsource: artifactRefSchema.describe('UTF-8 text artifact to read')\n})\n\nexport const artifactsReadLinesOutputSchema = z.object({\n\tsource: artifactRefSchema,\n\ttext: z.string().describe('Complete UTF-8 text content'),\n\tstart_line: z.int().min(1),\n\tend_line: z.int().min(1),\n\ttotal_lines: z.int().min(0)\n})\n\nexport const artifactResolveInputSchema = z.object({\n\tsource: artifactRefSchema,\n\tmax_bytes: z.int().min(0)\n})\n\nexport const resolvedArtifactSchema = z.object({\n\tartifact: artifactRefSchema,\n\tbytes: z.custom<Uint8Array>((value) => value instanceof Uint8Array, 'bytes must be a Uint8Array')\n})\n\nexport type ArtifactsCreateInput = z.infer<typeof artifactsCreateInputSchema>\nexport type ArtifactsCreateOutput = z.infer<typeof artifactsCreateOutputSchema>\nexport type ArtifactsReadRangeInput = z.infer<typeof artifactsReadRangeInputSchema>\nexport type ArtifactsReadRangeOutput = z.infer<typeof artifactsReadRangeOutputSchema>\nexport type ArtifactsReadLinesInput = z.infer<typeof artifactsReadLinesInputSchema>\nexport type ArtifactsReadLinesOutput = z.infer<typeof artifactsReadLinesOutputSchema>\nexport type ArtifactResolveInput = z.infer<typeof artifactResolveInputSchema>\nexport type ResolvedArtifact = z.infer<typeof resolvedArtifactSchema>\n\nexport type ArtifactsOps = {\n\tcreate(input: ArtifactsCreateInput): Promise<ArtifactsCreateOutput>\n\treadRange(input: ArtifactsReadRangeInput): Promise<ArtifactsReadRangeOutput>\n\treadLines(input: ArtifactsReadLinesInput): Promise<ArtifactsReadLinesOutput>\n}\n\nexport type ArtifactResolverOps = {\n\tresolve(input: ArtifactResolveInput): Promise<ResolvedArtifact>\n}\n\nexport type ArtifactsClientOps = ArtifactsOps & ArtifactResolverOps\n\nexport const artifactsBackendSchema = z.object({\n\tcreate: z.custom<ArtifactsOps['create']>(isFunction, 'create must be a function'),\n\treadRange: z.custom<ArtifactsOps['readRange']>(isFunction, 'readRange must be a function'),\n\treadLines: z.custom<ArtifactsOps['readLines']>(isFunction, 'readLines must be a function'),\n\tresolve: z.custom<ArtifactResolverOps['resolve']>(isFunction, 'resolve must be a function').optional()\n})\n\nexport const objectArtifactsAuthSchema = z.object({\n\tprovider: z.literal('object'),\n\tstorage: s3AuthSchema.describe('S3-compatible object storage for ArtifactRef bytes')\n})\n\nexport const hostArtifactsAuthSchema = z.object({\n\tprovider: z.literal('host'),\n\tbackend: artifactsBackendSchema.describe('Host artifact operations for host-mapped ArtifactRefs')\n})\n\nexport const artifactsAuthSchema = z.discriminatedUnion('provider', [\n\tobjectArtifactsAuthSchema,\n\thostArtifactsAuthSchema\n])\n\nexport type ArtifactsAuth = z.infer<typeof artifactsAuthSchema>\nexport type ObjectArtifactsAuth = z.infer<typeof objectArtifactsAuthSchema>\nexport type HostArtifactsAuth = z.infer<typeof hostArtifactsAuthSchema>\n","import { ToolError } from '../../../core/errors'\nimport type {\n\tArtifactResolveInput,\n\tArtifactsClientOps,\n\tArtifactsCreateInput,\n\tArtifactsCreateOutput,\n\tArtifactsReadLinesInput,\n\tArtifactsReadLinesOutput,\n\tArtifactsReadRangeInput,\n\tArtifactsReadRangeOutput,\n\tHostArtifactsAuth,\n\tResolvedArtifact\n} from '../contracts'\nimport {\n\tartifactsCreateOutputSchema,\n\tartifactsReadLinesOutputSchema,\n\tartifactsReadRangeOutputSchema,\n\tresolvedArtifactSchema\n} from '../contracts'\n\nfunction requireHostStore(store: 'object' | 'host'): void {\n\tif (store !== 'host') {\n\t\tthrow new ToolError('The host artifact provider only resolves host-mapped references', {\n\t\t\tcode: 'unsupported'\n\t\t})\n\t}\n}\n\nexport class HostArtifactsProvider implements ArtifactsClientOps {\n\treadonly #backend: HostArtifactsAuth['backend']\n\n\tconstructor(auth: HostArtifactsAuth) {\n\t\tthis.#backend = auth.backend\n\t}\n\n\tasync create(input: ArtifactsCreateInput): Promise<ArtifactsCreateOutput> {\n\t\tconst output = artifactsCreateOutputSchema.parse(await this.#backend.create(input))\n\t\trequireHostStore(output.artifact.store)\n\t\treturn output\n\t}\n\n\tasync readRange(input: ArtifactsReadRangeInput): Promise<ArtifactsReadRangeOutput> {\n\t\trequireHostStore(input.source.store)\n\t\treturn artifactsReadRangeOutputSchema.parse(await this.#backend.readRange(input))\n\t}\n\n\tasync readLines(input: ArtifactsReadLinesInput): Promise<ArtifactsReadLinesOutput> {\n\t\trequireHostStore(input.source.store)\n\t\treturn artifactsReadLinesOutputSchema.parse(await this.#backend.readLines(input))\n\t}\n\n\tasync resolve(input: ArtifactResolveInput): Promise<ResolvedArtifact> {\n\t\trequireHostStore(input.source.store)\n\t\tif (input.source.byte_length !== undefined && input.source.byte_length > input.max_bytes) {\n\t\t\tthrow new ToolError('Artifact exceeds resolution limit', {\n\t\t\t\tcode: 'too_large',\n\t\t\t\tdetails: { max_bytes: input.max_bytes, content_length: input.source.byte_length }\n\t\t\t})\n\t\t}\n\t\tif (!this.#backend.resolve) {\n\t\t\tthrow new ToolError('The host artifact backend does not support byte resolution', {\n\t\t\t\tcode: 'unsupported'\n\t\t\t})\n\t\t}\n\n\t\tconst output = resolvedArtifactSchema.parse(await this.#backend.resolve(input))\n\t\trequireHostStore(output.artifact.store)\n\t\tif (output.artifact.key !== input.source.key) {\n\t\t\tthrow new ToolError('The host artifact backend resolved a different artifact', {\n\t\t\t\tcode: 'internal'\n\t\t\t})\n\t\t}\n\t\tif (output.bytes.byteLength > input.max_bytes) {\n\t\t\tthrow new ToolError('Artifact exceeds resolution limit', {\n\t\t\t\tcode: 'too_large',\n\t\t\t\tdetails: { max_bytes: input.max_bytes, content_length: output.bytes.byteLength }\n\t\t\t})\n\t\t}\n\t\treturn {\n\t\t\tartifact: {\n\t\t\t\t...input.source,\n\t\t\t\t...output.artifact,\n\t\t\t\tbyte_length: output.bytes.byteLength\n\t\t\t},\n\t\t\tbytes: output.bytes\n\t\t}\n\t}\n}\n","import { ToolError } from '../../../core/errors'\nimport { artifactRefSchema } from '../../../shared/artifact'\nimport { base64ToBytes, bytesToBase64, bytesToUtf8, utf8ToBytes } from '../../../shared/bytes'\nimport { mediaTypeFromPath } from '../../../shared/content-type'\nimport type { HttpServiceOptions } from '../../../transport/http-service'\nimport { S3Client } from '../../../vendors/s3'\nimport type {\n\tArtifactResolveInput,\n\tArtifactsClientOps,\n\tArtifactsCreateInput,\n\tArtifactsCreateOutput,\n\tArtifactsReadLinesInput,\n\tArtifactsReadLinesOutput,\n\tArtifactsReadRangeInput,\n\tArtifactsReadRangeOutput,\n\tObjectArtifactsAuth,\n\tResolvedArtifact\n} from '../contracts'\nimport { MAX_ARTIFACT_CREATE_BYTES, MAX_ARTIFACT_READ_BYTES } from '../contracts'\n\nexport type ObjectArtifactsProviderOptions = Pick<HttpServiceOptions, 'fetch' | 'signal'>\n\nfunction requireObjectSource(store: 'object' | 'host'): void {\n\tif (store !== 'object') {\n\t\tthrow new ToolError('The object artifact provider only resolves object-store references', {\n\t\t\tcode: 'unsupported'\n\t\t})\n\t}\n}\n\nfunction artifactBytes(input: ArtifactsCreateInput): Uint8Array {\n\tconst bytes = input.encoding === 'base64' ? base64ToBytes(input.body) : utf8ToBytes(input.body)\n\tif (bytes.byteLength > MAX_ARTIFACT_CREATE_BYTES) {\n\t\tthrow new ToolError('Artifact body exceeds create limit', {\n\t\t\tcode: 'too_large',\n\t\t\tdetails: { max_bytes: MAX_ARTIFACT_CREATE_BYTES, content_length: bytes.byteLength }\n\t\t})\n\t}\n\treturn bytes\n}\n\nfunction textLines(text: string): string[] {\n\treturn text.split('\\n').map((line) => (line.endsWith('\\r') ? line.slice(0, -1) : line))\n}\n\nexport class ObjectArtifactsProvider implements ArtifactsClientOps {\n\treadonly #storage: S3Client\n\n\tconstructor(auth: ObjectArtifactsAuth, options: ObjectArtifactsProviderOptions = {}) {\n\t\tthis.#storage = new S3Client(auth.storage, options)\n\t}\n\n\tasync create(input: ArtifactsCreateInput): Promise<ArtifactsCreateOutput> {\n\t\tconst bytes = artifactBytes(input)\n\t\tconst mediaType = input.media_type ?? mediaTypeFromPath(input.filename ?? input.key)\n\t\tawait this.#storage.putBytes(input.key, bytes, mediaType)\n\t\treturn {\n\t\t\tartifact: artifactRefSchema.parse({\n\t\t\t\tstore: 'object',\n\t\t\t\tkey: input.key,\n\t\t\t\tbyte_length: bytes.byteLength,\n\t\t\t\t...(mediaType && { media_type: mediaType }),\n\t\t\t\t...(input.filename && { filename: input.filename })\n\t\t\t})\n\t\t}\n\t}\n\n\tasync readRange(input: ArtifactsReadRangeInput): Promise<ArtifactsReadRangeOutput> {\n\t\trequireObjectSource(input.source.store)\n\t\tconst result = await this.#storage.getBytesRange(input.source.key, {\n\t\t\tstart_byte: input.start_byte,\n\t\t\tend_byte: input.end_byte\n\t\t})\n\t\treturn {\n\t\t\tsource: input.source,\n\t\t\tbody_base64: bytesToBase64(result.bytes),\n\t\t\tstart_byte: result.start_byte,\n\t\t\tend_byte: result.end_byte,\n\t\t\t...(result.total_bytes !== undefined && { total_bytes: result.total_bytes }),\n\t\t\t...(result.content_type && { media_type: result.content_type })\n\t\t}\n\t}\n\n\tasync readLines(input: ArtifactsReadLinesInput): Promise<ArtifactsReadLinesOutput> {\n\t\trequireObjectSource(input.source.store)\n\t\tconst bytes = await this.#storage.getBytes(input.source.key, { maxBytes: MAX_ARTIFACT_READ_BYTES })\n\t\tconst lines = textLines(bytesToUtf8(bytes))\n\t\treturn {\n\t\t\tsource: input.source,\n\t\t\ttext: lines.join('\\n'),\n\t\t\tstart_line: 1,\n\t\t\tend_line: lines.length,\n\t\t\ttotal_lines: lines.length\n\t\t}\n\t}\n\n\tasync resolve(input: ArtifactResolveInput): Promise<ResolvedArtifact> {\n\t\trequireObjectSource(input.source.store)\n\t\tif (input.source.byte_length !== undefined && input.source.byte_length > input.max_bytes) {\n\t\t\tthrow new ToolError('Artifact exceeds resolution limit', {\n\t\t\t\tcode: 'too_large',\n\t\t\t\tdetails: { max_bytes: input.max_bytes, content_length: input.source.byte_length }\n\t\t\t})\n\t\t}\n\n\t\tconst head = await this.#storage.head({ key: input.source.key })\n\t\tif (!head.exists) {\n\t\t\tthrow new ToolError('Artifact not found', { code: 'not_found' })\n\t\t}\n\t\tif (head.content_length !== undefined && head.content_length > input.max_bytes) {\n\t\t\tthrow new ToolError('Artifact exceeds resolution limit', {\n\t\t\t\tcode: 'too_large',\n\t\t\t\tdetails: { max_bytes: input.max_bytes, content_length: head.content_length }\n\t\t\t})\n\t\t}\n\n\t\tconst bytes = await this.#storage.getBytes(input.source.key, { maxBytes: input.max_bytes })\n\t\treturn {\n\t\t\tartifact: artifactRefSchema.parse({\n\t\t\t\t...input.source,\n\t\t\t\t...(!input.source.media_type && head.content_type && { media_type: head.content_type }),\n\t\t\t\tbyte_length: bytes.byteLength\n\t\t\t}),\n\t\t\tbytes\n\t\t}\n\t}\n}\n","import { ToolError } from '../../core/errors'\nimport { requireAuth } from '../../core/provider'\nimport type { ToolContext } from '../../core/types'\nimport type {\n\tArtifactResolveInput,\n\tArtifactsAuth,\n\tArtifactsClientOps,\n\tArtifactsCreateInput,\n\tArtifactsReadLinesInput,\n\tArtifactsReadRangeInput,\n\tResolvedArtifact\n} from './contracts'\nimport { artifactResolveInputSchema, artifactsAuthSchema, resolvedArtifactSchema } from './contracts'\nimport { HostArtifactsProvider } from './providers/host'\nimport { ObjectArtifactsProvider } from './providers/object'\n\nfunction transportOptions(ctx: ToolContext) {\n\treturn {\n\t\t...(ctx.fetch && { fetch: ctx.fetch }),\n\t\t...(ctx.signal && { signal: ctx.signal })\n\t}\n}\n\nfunction providerFor(auth: ArtifactsAuth, ctx: ToolContext): ArtifactsClientOps {\n\tswitch (auth.provider) {\n\t\tcase 'object':\n\t\t\treturn new ObjectArtifactsProvider(auth, transportOptions(ctx))\n\t\tcase 'host':\n\t\t\treturn new HostArtifactsProvider(auth)\n\t}\n}\n\nexport class ArtifactsClient implements ArtifactsClientOps {\n\treadonly #ops: ArtifactsClientOps\n\n\tconstructor(ops: ArtifactsClientOps) {\n\t\tthis.#ops = ops\n\t}\n\n\tstatic fromContext(ctx: ToolContext): ArtifactsClient {\n\t\tconst auth = requireAuth(ctx, artifactsAuthSchema)\n\t\treturn new ArtifactsClient(providerFor(auth, ctx))\n\t}\n\n\tstatic fromAuth(auth: ArtifactsAuth, ctx: ToolContext = {}): ArtifactsClient {\n\t\treturn new ArtifactsClient(providerFor(auth, ctx))\n\t}\n\n\tcreate(input: ArtifactsCreateInput) {\n\t\treturn this.#ops.create(input)\n\t}\n\n\treadRange(input: ArtifactsReadRangeInput) {\n\t\treturn this.#ops.readRange(input)\n\t}\n\n\treadLines(input: ArtifactsReadLinesInput) {\n\t\treturn this.#ops.readLines(input)\n\t}\n\n\tasync resolve(input: ArtifactResolveInput): Promise<ResolvedArtifact> {\n\t\tconst parsedInput = artifactResolveInputSchema.parse(input)\n\t\tconst output = resolvedArtifactSchema.parse(await this.#ops.resolve(parsedInput))\n\t\tif (output.bytes.byteLength > parsedInput.max_bytes) {\n\t\t\tthrow new ToolError('Artifact exceeds resolution limit', {\n\t\t\t\tcode: 'too_large',\n\t\t\t\tdetails: { max_bytes: parsedInput.max_bytes, content_length: output.bytes.byteLength }\n\t\t\t})\n\t\t}\n\t\treturn {\n\t\t\tartifact: {\n\t\t\t\t...output.artifact,\n\t\t\t\tbyte_length: output.bytes.byteLength\n\t\t\t},\n\t\t\tbytes: output.bytes\n\t\t}\n\t}\n}\n","import { defineModule, defineTool } from '../../core/define'\nimport { ArtifactsClient } from './client'\nimport {\n\tartifactsAuthSchema,\n\tartifactsCreateInputSchema,\n\tartifactsCreateOutputSchema,\n\tartifactsReadLinesInputSchema,\n\tartifactsReadLinesOutputSchema,\n\tartifactsReadRangeInputSchema,\n\tartifactsReadRangeOutputSchema\n} from './contracts'\n\nexport const artifactsCreateTool = defineTool({\n\tid: 'artifacts-create',\n\tname: 'createArtifact',\n\tdescription:\n\t\t'Persist small, already-serialized UTF-8 or base64 content and return its ArtifactRef. Use for raw bytes or text when no structured builder is required. Do not use this to invent DOCX, XLSX, PPTX, PDF, or image formats.',\n\tinputSchema: artifactsCreateInputSchema,\n\toutputSchema: artifactsCreateOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => ArtifactsClient.fromContext(ctx).create(input)\n})\n\nexport const artifactsReadRangeTool = defineTool({\n\tid: 'artifacts-read-range',\n\tname: 'readArtifactRange',\n\tdescription:\n\t\t'Read an explicit inclusive byte range from an existing ArtifactRef as base64. Use for bounded binary inspection or chunked transfer, not for understanding a supported document when a format-aware reader is available.',\n\tinputSchema: artifactsReadRangeInputSchema,\n\toutputSchema: artifactsReadRangeOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\texecute: async (input, ctx) => ArtifactsClient.fromContext(ctx).readRange(input)\n})\n\nexport const artifactsReadLinesTool = defineTool({\n\tid: 'artifacts-read-lines',\n\tname: 'readArtifactLines',\n\tdescription: 'Read the complete contents of a UTF-8 text artifact, bounded by the artifact read-size limit.',\n\tinputSchema: artifactsReadLinesInputSchema,\n\toutputSchema: artifactsReadLinesOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\texecute: async (input, ctx) => ArtifactsClient.fromContext(ctx).readLines(input)\n})\n\nexport const artifactsModule = defineModule({\n\tid: 'artifacts',\n\ttitle: 'Artifacts',\n\tdescription:\n\t\t'Persist small serialized content, inspect bounded byte ranges, and read UTF-8 text artifacts. ArtifactRef is the handoff between tools; structured document creation belongs to purpose-built builders.',\n\truntime: 'both',\n\tauth: { type: 'custom', schema: artifactsAuthSchema },\n\tcategories: ['storage', 'artifacts'],\n\tclassification: 'pii',\n\ttags: ['artifact-ref', 'object-store'],\n\ttools: [artifactsCreateTool, artifactsReadRangeTool, artifactsReadLinesTool]\n})\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { n as defineModule, r as defineTool } from "../../define-ieoksEQ0.js";
2
2
  import { n as requireAuth } from "../../provider-CgDAlg6K.js";
3
3
  import { _ as MAX_COMMAND_CHARS, g as MAX_CODE_CHARS, m as BedrockAgentCoreCodeInterpreterClient, x as bedrockAgentCoreCodeInterpreterAuthSchema, y as MAX_FILE_TEXT } from "../../bedrock-agentcore-code-interpreter-F0dnrAm4.js";
4
- import { F as cloudflareSandboxAuthSchema, v as CloudflareSandboxClient } from "../../cloudflare-sandbox-6nX5lIev.js";
4
+ import { F as cloudflareSandboxAuthSchema, v as CloudflareSandboxClient } from "../../cloudflare-sandbox-BPXbaBOp.js";
5
5
  import { isPlainObject, isString } from "es-toolkit";
6
6
  import { z } from "zod";
7
7
  //#region src/modules/code-sandbox/contracts.ts
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/vendors/cloudflare-sandbox/contracts.ts","../../../src/vendors/cloudflare-sandbox/client.ts","../../../src/vendors/cloudflare-sandbox/domain.ts","../../../src/vendors/cloudflare-sandbox/module.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/vendors/cloudflare-sandbox/contracts.ts","../../../src/vendors/cloudflare-sandbox/client.ts","../../../src/vendors/cloudflare-sandbox/domain.ts","../../../src/vendors/cloudflare-sandbox/module.ts"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { $ as readFileInputSchema, A as MAX_FILE_PATH, B as destroySandboxOutputSchema, C as workspaceAbsolutePath, D as MAX_ARG_CHARS, E as MAX_ARGV, F as cloudflareSandboxAuthSchema, G as exportArtifactOutputSchema, H as execOutputSchema, I as createBridgeSessionOutputSchema, J as importArtifactOutputSchema, K as healthOutputSchema, L as createSandboxOutputSchema, M as MAX_LIST_FILES, N as MAX_READ_PATHS, O as MAX_EXEC_TIMEOUT_MS, P as MAX_WRITE_FILES, Q as mountBucketOutputSchema, R as deleteBridgeSessionInputSchema, S as shellQuote, T as DEFAULT_EXEC_TIMEOUT_MS, U as executeCodeInputSchema, V as execInputSchema, W as exportArtifactInputSchema, X as listFilesOutputSchema, Y as listFilesInputSchema, Z as mountBucketInputSchema, _ as cloudflareSandboxWriteFilesTool, a as cloudflareSandboxExecTool, at as runningOutputSchema, b as parseExecSse, c as cloudflareSandboxHealthTool, ct as unmountBucketInputSchema, d as cloudflareSandboxModule, dt as writeFileOutputSchema, et as readFileOutputSchema, f as cloudflareSandboxReadFileTool, ft as writeFilesInputSchema, g as cloudflareSandboxWriteFileTool, h as cloudflareSandboxRunningTool, i as cloudflareSandboxDestroyTool, it as removeFilesOutputSchema, j as MAX_FILE_TEXT, k as MAX_FILE_BYTES, l as cloudflareSandboxImportArtifactTool, lt as unmountBucketOutputSchema, m as cloudflareSandboxRemoveFilesTool, n as cloudflareSandboxCreateTool, nt as readFilesOutputSchema, o as cloudflareSandboxExecuteCodeTool, ot as sandboxIdInputSchema, p as cloudflareSandboxReadFilesTool, pt as writeFilesOutputSchema, q as importArtifactInputSchema, r as cloudflareSandboxDeleteSessionTool, rt as removeFilesInputSchema, s as cloudflareSandboxExportArtifactTool, st as sandboxObjectArtifactRefSchema, t as cloudflareSandboxCreateSessionTool, tt as readFilesInputSchema, u as cloudflareSandboxListFilesTool, ut as writeFileInputSchema, v as CloudflareSandboxClient, w as workspaceFileKey, x as resolveWriteFileBytes, y as executeCodeArgv, z as deleteBridgeSessionOutputSchema } from "../../cloudflare-sandbox-6nX5lIev.js";
1
+ import { $ as readFileInputSchema, A as MAX_FILE_PATH, B as destroySandboxOutputSchema, C as workspaceAbsolutePath, D as MAX_ARG_CHARS, E as MAX_ARGV, F as cloudflareSandboxAuthSchema, G as exportArtifactOutputSchema, H as execOutputSchema, I as createBridgeSessionOutputSchema, J as importArtifactOutputSchema, K as healthOutputSchema, L as createSandboxOutputSchema, M as MAX_LIST_FILES, N as MAX_READ_PATHS, O as MAX_EXEC_TIMEOUT_MS, P as MAX_WRITE_FILES, Q as mountBucketOutputSchema, R as deleteBridgeSessionInputSchema, S as shellQuote, T as DEFAULT_EXEC_TIMEOUT_MS, U as executeCodeInputSchema, V as execInputSchema, W as exportArtifactInputSchema, X as listFilesOutputSchema, Y as listFilesInputSchema, Z as mountBucketInputSchema, _ as cloudflareSandboxWriteFilesTool, a as cloudflareSandboxExecTool, at as runningOutputSchema, b as parseExecSse, c as cloudflareSandboxHealthTool, ct as unmountBucketInputSchema, d as cloudflareSandboxModule, dt as writeFileOutputSchema, et as readFileOutputSchema, f as cloudflareSandboxReadFileTool, ft as writeFilesInputSchema, g as cloudflareSandboxWriteFileTool, h as cloudflareSandboxRunningTool, i as cloudflareSandboxDestroyTool, it as removeFilesOutputSchema, j as MAX_FILE_TEXT, k as MAX_FILE_BYTES, l as cloudflareSandboxImportArtifactTool, lt as unmountBucketOutputSchema, m as cloudflareSandboxRemoveFilesTool, n as cloudflareSandboxCreateTool, nt as readFilesOutputSchema, o as cloudflareSandboxExecuteCodeTool, ot as sandboxIdInputSchema, p as cloudflareSandboxReadFilesTool, pt as writeFilesOutputSchema, q as importArtifactInputSchema, r as cloudflareSandboxDeleteSessionTool, rt as removeFilesInputSchema, s as cloudflareSandboxExportArtifactTool, st as sandboxObjectArtifactRefSchema, t as cloudflareSandboxCreateSessionTool, tt as readFilesInputSchema, u as cloudflareSandboxListFilesTool, ut as writeFileInputSchema, v as CloudflareSandboxClient, w as workspaceFileKey, x as resolveWriteFileBytes, y as executeCodeArgv, z as deleteBridgeSessionOutputSchema } from "../../cloudflare-sandbox-BPXbaBOp.js";
2
2
  export { CloudflareSandboxClient, DEFAULT_EXEC_TIMEOUT_MS, MAX_ARGV, MAX_ARG_CHARS, MAX_EXEC_TIMEOUT_MS, MAX_FILE_BYTES, MAX_FILE_PATH, MAX_FILE_TEXT, MAX_LIST_FILES, MAX_READ_PATHS, MAX_WRITE_FILES, cloudflareSandboxAuthSchema, cloudflareSandboxCreateSessionTool, cloudflareSandboxCreateTool, cloudflareSandboxDeleteSessionTool, cloudflareSandboxDestroyTool, cloudflareSandboxExecTool, cloudflareSandboxExecuteCodeTool, cloudflareSandboxExportArtifactTool, cloudflareSandboxHealthTool, cloudflareSandboxImportArtifactTool, cloudflareSandboxListFilesTool, cloudflareSandboxModule, cloudflareSandboxReadFileTool, cloudflareSandboxReadFilesTool, cloudflareSandboxRemoveFilesTool, cloudflareSandboxRunningTool, cloudflareSandboxWriteFileTool, cloudflareSandboxWriteFilesTool, createBridgeSessionOutputSchema, createSandboxOutputSchema, deleteBridgeSessionInputSchema, deleteBridgeSessionOutputSchema, destroySandboxOutputSchema, execInputSchema, execOutputSchema, executeCodeArgv, executeCodeInputSchema, exportArtifactInputSchema, exportArtifactOutputSchema, healthOutputSchema, importArtifactInputSchema, importArtifactOutputSchema, listFilesInputSchema, listFilesOutputSchema, mountBucketInputSchema, mountBucketOutputSchema, parseExecSse, readFileInputSchema, readFileOutputSchema, readFilesInputSchema, readFilesOutputSchema, removeFilesInputSchema, removeFilesOutputSchema, resolveWriteFileBytes, runningOutputSchema, sandboxIdInputSchema, sandboxObjectArtifactRefSchema, shellQuote, unmountBucketInputSchema, unmountBucketOutputSchema, workspaceAbsolutePath, workspaceFileKey, writeFileInputSchema, writeFileOutputSchema, writeFilesInputSchema, writeFilesOutputSchema };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@5ss/ai-tools",
3
- "version": "3.0.3",
3
+ "version": "3.2.0",
4
4
  "description": "Reusable AI tools with strict schemas and model-facing contracts. Define once; project to Node, edge, Mastra, AI SDK, TanStack AI, Cloudflare Workers AI, or MCP.",
5
5
  "license": "MIT",
6
6
  "author": "harryy",