@librechat/agents 3.1.91 → 3.1.93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/graphs/Graph.cjs +5 -3
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/instrumentation.cjs +2 -7
- package/dist/cjs/instrumentation.cjs.map +1 -1
- package/dist/cjs/langfuse.cjs +62 -11
- package/dist/cjs/langfuse.cjs.map +1 -1
- package/dist/cjs/run.cjs +33 -19
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs +1 -0
- package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs +13 -7
- package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs.map +1 -1
- package/dist/cjs/utils/callbacks.cjs +27 -0
- package/dist/cjs/utils/callbacks.cjs.map +1 -0
- package/dist/esm/graphs/Graph.mjs +6 -4
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/instrumentation.mjs +2 -7
- package/dist/esm/instrumentation.mjs.map +1 -1
- package/dist/esm/langfuse.mjs +63 -14
- package/dist/esm/langfuse.mjs.map +1 -1
- package/dist/esm/run.mjs +34 -20
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs +1 -0
- package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs +13 -7
- package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs.map +1 -1
- package/dist/esm/utils/callbacks.mjs +24 -0
- package/dist/esm/utils/callbacks.mjs.map +1 -0
- package/dist/types/langfuse.d.ts +13 -4
- package/dist/types/types/run.d.ts +2 -2
- package/dist/types/types/tools.d.ts +6 -0
- package/dist/types/utils/callbacks.d.ts +5 -0
- package/package.json +4 -4
- package/src/graphs/Graph.ts +10 -6
- package/src/instrumentation.ts +2 -7
- package/src/langfuse.ts +98 -15
- package/src/run.ts +53 -29
- package/src/specs/langfuse-callbacks.test.ts +75 -0
- package/src/specs/langfuse-config.test.ts +58 -1
- package/src/tools/__tests__/CloudflareSandboxExecution.test.ts +87 -8
- package/src/tools/cloudflare/CloudflareBridgeRuntime.ts +1 -0
- package/src/tools/cloudflare/CloudflareSandboxExecutionEngine.ts +13 -7
- package/src/types/run.ts +2 -7
- package/src/types/tools.ts +6 -0
- package/src/utils/callbacks.ts +39 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CloudflareSandboxExecutionEngine.cjs","sources":["../../../../src/tools/cloudflare/CloudflareSandboxExecutionEngine.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { PassThrough } from 'stream';\nimport { posix as path } from 'path';\nimport type { ChildProcessWithoutNullStreams } from 'child_process';\nimport type { WriteFileOptions, MakeDirectoryOptions, Stats } from 'fs';\nimport type { FileHandle } from 'fs/promises';\nimport type * as t from '@/types';\nimport {\n LOCAL_SPAWN_TIMEOUT_MS,\n validateBashCommand,\n} from '@/tools/local/LocalExecutionEngine';\nimport type { WorkspaceFS, ReaddirEntry } from '@/tools/local/workspaceFS';\n\nconst DEFAULT_WORKSPACE_ROOT = '/workspace';\nconst DEFAULT_TIMEOUT_MS = 60000;\nconst DEFAULT_MAX_OUTPUT_CHARS = 200000;\nconst PROTECTED_TARGET_ARG_RE = /^(?:\\/|~|\\$\\{?HOME\\}?|\\.)(?:\\/?\\.?\\*|\\/)?$/;\nconst DESTRUCTIVE_OP_IN_COMMAND_RE =\n /\\b(?:rm\\s+-[^\\s]*[rf]|chmod\\s+-R|chown\\s+-R)\\b/;\n\ntype SpawnResult = {\n stdout: string;\n stderr: string;\n exitCode: number | null;\n timedOut: boolean;\n};\n\ntype RuntimeCommand = {\n fileName: string;\n source?: string;\n command: string;\n};\n\ntype SandboxRuntimeContext = {\n sandbox: t.CloudflareSandboxRuntime;\n workspaceRoot: string;\n env?: Record<string, string | undefined>;\n timeoutMs: number;\n maxOutputChars: number;\n shell: string;\n};\n\nconst sandboxFactoryCache = new WeakMap<\n t.CloudflareSandboxExecutionConfig,\n Promise<t.CloudflareSandboxRuntime>\n>();\n\nfunction normalizeWorkspaceRoot(workspaceRoot: string): string {\n const normalized = path.normalize(workspaceRoot);\n return normalized === '/' ? normalized : normalized.replace(/\\/+$/, '');\n}\n\nexport function getCloudflareWorkspaceRoot(\n config?: t.CloudflareSandboxExecutionConfig\n): string {\n return normalizeWorkspaceRoot(\n config?.workspaceRoot ?? DEFAULT_WORKSPACE_ROOT\n );\n}\n\nexport async function resolveCloudflareSandbox(\n config: t.CloudflareSandboxExecutionConfig\n): Promise<t.CloudflareSandboxRuntime> {\n const sandbox = config.sandbox;\n if (typeof sandbox !== 'function') {\n return sandbox;\n }\n let cached = sandboxFactoryCache.get(config);\n if (cached == null) {\n cached = Promise.resolve()\n .then(() => sandbox())\n .catch((error: unknown) => {\n sandboxFactoryCache.delete(config);\n throw error;\n });\n sandboxFactoryCache.set(config, cached);\n }\n return cached;\n}\n\nasync function getRuntimeContext(\n config: t.CloudflareSandboxExecutionConfig\n): Promise<SandboxRuntimeContext> {\n return {\n sandbox: await resolveCloudflareSandbox(config),\n workspaceRoot: getCloudflareWorkspaceRoot(config),\n env: config.env,\n timeoutMs: config.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n maxOutputChars: config.maxOutputChars ?? DEFAULT_MAX_OUTPUT_CHARS,\n shell: config.shell ?? 'bash',\n };\n}\n\nfunction toSandboxPath(filePath: string, workspaceRoot: string): string {\n const raw = filePath === '' ? '.' : filePath;\n const root = normalizeWorkspaceRoot(workspaceRoot);\n const resolved = raw.startsWith('/')\n ? path.normalize(raw)\n : path.resolve(root, raw);\n if (root === '/') {\n return resolved;\n }\n if (resolved === root || resolved.startsWith(`${root}/`)) {\n return resolved;\n }\n throw new Error(\n `Path is outside the Cloudflare sandbox workspace: ${filePath}`\n );\n}\n\nfunction quote(value: string): string {\n if (value === '') {\n return '\\'\\'';\n }\n if (/^[A-Za-z0-9_/:=.,@%+-]+$/.test(value)) {\n return value;\n }\n return `'${value.replace(/'/g, '\\'\\\\\\'\\'')}'`;\n}\n\nfunction withInSandboxTimeout(command: string, timeoutMs: number): string {\n const timeoutSeconds = Math.max(1, Math.ceil(timeoutMs / 1000));\n return `timeout -k 2s ${timeoutSeconds}s ${command}`;\n}\n\nfunction outerTimeoutMs(timeoutMs: number): number {\n return timeoutMs + 5000;\n}\n\nfunction isInSandboxTimeoutExit(exitCode: number | null): boolean {\n return exitCode === 124 || exitCode === 137;\n}\n\nfunction truncateOutput(value: string, maxChars: number): string {\n if (maxChars <= 0 || value.length <= maxChars) {\n return value;\n }\n const head = Math.max(Math.floor(maxChars / 2), 0);\n const tail = Math.max(maxChars - head, 0);\n return `${value.slice(0, head)}\\n...[truncated ${value.length - maxChars} chars]...\\n${value.slice(value.length - tail)}`;\n}\n\nasync function readStream(stream: ReadableStream<Uint8Array>): Promise<Buffer> {\n const reader = stream.getReader();\n const chunks: Uint8Array[] = [];\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n }\n } finally {\n reader.releaseLock();\n }\n return Buffer.concat(chunks.map((chunk) => Buffer.from(chunk)));\n}\n\nasync function normalizeReadFileContent(\n result: t.CloudflareSandboxReadFileResult\n): Promise<Buffer> {\n if (typeof result === 'string') {\n return Buffer.from(result, 'utf8');\n }\n if (Buffer.isBuffer(result)) {\n return result;\n }\n if (result instanceof Uint8Array) {\n return Buffer.from(result);\n }\n const content = result.content;\n if (typeof content === 'string') {\n if (result.encoding === 'base64') {\n return Buffer.from(content, 'base64');\n }\n return Buffer.from(content, 'utf8');\n }\n if (Buffer.isBuffer(content)) {\n return content;\n }\n if (content instanceof Uint8Array) {\n return Buffer.from(content);\n }\n return readStream(content);\n}\n\nfunction bytesToStream(bytes: Uint8Array): ReadableStream<Uint8Array> {\n return new ReadableStream<Uint8Array>({\n start(controller): void {\n controller.enqueue(bytes);\n controller.close();\n },\n });\n}\n\nfunction normalizeWriteFileContent(content: string | Buffer | Uint8Array): {\n content: string | ReadableStream<Uint8Array>;\n options?: { encoding?: string };\n} {\n if (typeof content === 'string') {\n return { content, options: { encoding: 'utf8' } };\n }\n return { content: bytesToStream(content) };\n}\n\nfunction createStats(info: {\n size?: number;\n type?: t.CloudflareSandboxFileInfo['type'];\n}): Stats {\n const type = info.type ?? 'file';\n const now = new Date();\n return {\n size: info.size ?? 0,\n isFile: () => type === 'file',\n isDirectory: () => type === 'directory',\n isSymbolicLink: () => type === 'symlink',\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isFIFO: () => false,\n isSocket: () => false,\n dev: 0,\n ino: 0,\n mode: 0,\n nlink: 1,\n uid: 0,\n gid: 0,\n rdev: 0,\n blksize: 0,\n blocks: 0,\n atimeMs: now.getTime(),\n mtimeMs: now.getTime(),\n ctimeMs: now.getTime(),\n birthtimeMs: now.getTime(),\n atime: now,\n mtime: now,\n ctime: now,\n birthtime: now,\n } as Stats;\n}\n\nfunction normalizeFileList(\n result: t.CloudflareSandboxListFilesResult\n): t.CloudflareSandboxFileInfo[] {\n return Array.isArray(result) ? result : result.files;\n}\n\nfunction entryNameFor(\n info: t.CloudflareSandboxFileInfo,\n parentPath: string\n): string {\n if (info.name !== '') {\n return info.name.includes('/') ? path.basename(info.name) : info.name;\n }\n if (info.absolutePath != null && info.absolutePath !== '') {\n return path.basename(info.absolutePath);\n }\n if (info.relativePath != null && info.relativePath !== '') {\n return path.basename(info.relativePath);\n }\n return path.basename(parentPath);\n}\n\nfunction entryAbsolutePath(\n info: t.CloudflareSandboxFileInfo,\n parentPath: string\n): string {\n if (info.absolutePath != null && info.absolutePath !== '') {\n return path.normalize(info.absolutePath);\n }\n if (info.relativePath != null && info.relativePath !== '') {\n return path.resolve(parentPath, info.relativePath);\n }\n return path.resolve(parentPath, info.name);\n}\n\nfunction createDirent(info: t.CloudflareSandboxFileInfo): ReaddirEntry {\n return {\n name: entryNameFor(info, ''),\n isFile: () => (info.type ?? 'file') === 'file',\n isDirectory: () => info.type === 'directory',\n isSymbolicLink: () => info.type === 'symlink',\n };\n}\n\nasync function findChildInfo(\n sandbox: t.CloudflareSandboxRuntime,\n filePath: string\n): Promise<t.CloudflareSandboxFileInfo | undefined> {\n const parent = path.dirname(filePath);\n const basename = path.basename(filePath);\n const entries = normalizeFileList(\n await sandbox.listFiles(parent, { includeHidden: true })\n );\n return entries.find((entry) => {\n const absolute = entryAbsolutePath(entry, parent);\n return absolute === filePath || entryNameFor(entry, parent) === basename;\n });\n}\n\nexport function createCloudflareWorkspaceFS(\n config: t.CloudflareSandboxExecutionConfig\n): WorkspaceFS {\n const workspaceRoot = getCloudflareWorkspaceRoot(config);\n\n const fs: WorkspaceFS = {\n readFile: (async (filePath: string, encoding?: 'utf8') => {\n const sandbox = await resolveCloudflareSandbox(config);\n const resolved = toSandboxPath(filePath, workspaceRoot);\n const buffer = await normalizeReadFileContent(\n await sandbox.readFile(resolved, encoding ? { encoding } : undefined)\n );\n return encoding != null ? buffer.toString(encoding) : buffer;\n }) as WorkspaceFS['readFile'],\n writeFile: async (\n filePath: string,\n content: string | Buffer,\n _options?: WriteFileOptions\n ) => {\n const sandbox = await resolveCloudflareSandbox(config);\n const resolved = toSandboxPath(filePath, workspaceRoot);\n const normalized = normalizeWriteFileContent(content);\n await sandbox.writeFile(resolved, normalized.content, normalized.options);\n },\n stat: async (filePath: string) => {\n const sandbox = await resolveCloudflareSandbox(config);\n const resolved = toSandboxPath(filePath, workspaceRoot);\n if (resolved === workspaceRoot) {\n const entries = normalizeFileList(\n await sandbox.listFiles(resolved, { includeHidden: true })\n );\n return createStats({ size: entries.length, type: 'directory' });\n }\n const info = await findChildInfo(sandbox, resolved);\n if (info != null) {\n return createStats({ size: info.size, type: info.type });\n }\n try {\n const entries = normalizeFileList(\n await sandbox.listFiles(resolved, { includeHidden: true })\n );\n return createStats({ size: entries.length, type: 'directory' });\n } catch {\n const buffer = await normalizeReadFileContent(\n await sandbox.readFile(resolved)\n );\n return createStats({ size: buffer.length, type: 'file' });\n }\n },\n readdir: (async (filePath: string, options?: { withFileTypes: true }) => {\n const sandbox = await resolveCloudflareSandbox(config);\n const resolved = toSandboxPath(filePath, workspaceRoot);\n const entries = normalizeFileList(\n await sandbox.listFiles(resolved, { includeHidden: true })\n );\n if (options?.withFileTypes === true) {\n return entries.map(createDirent);\n }\n return entries.map((entry) => entryNameFor(entry, resolved));\n }) as WorkspaceFS['readdir'],\n mkdir: async (filePath: string, options?: MakeDirectoryOptions) => {\n const sandbox = await resolveCloudflareSandbox(config);\n await sandbox.mkdir(toSandboxPath(filePath, workspaceRoot), {\n recursive: options?.recursive,\n });\n },\n realpath: async (filePath: string) =>\n toSandboxPath(filePath, workspaceRoot),\n unlink: async (filePath: string) => {\n const sandbox = await resolveCloudflareSandbox(config);\n await sandbox.deleteFile(toSandboxPath(filePath, workspaceRoot));\n },\n open: async (filePath: string, _flags: 'r') => {\n const sandbox = await resolveCloudflareSandbox(config);\n const resolved = toSandboxPath(filePath, workspaceRoot);\n const buffer = await normalizeReadFileContent(\n await sandbox.readFile(resolved)\n );\n return {\n read: async (\n target: Buffer,\n offset: number,\n length: number,\n position: number\n ) => {\n const start = Math.max(position, 0);\n const slice = buffer.subarray(start, start + length);\n slice.copy(target, offset);\n return { bytesRead: slice.length, buffer: target };\n },\n close: async () => undefined,\n } as unknown as FileHandle;\n },\n };\n\n return fs;\n}\n\nfunction createCloudflareSpawn(\n config: t.CloudflareSandboxExecutionConfig\n): t.LocalSpawn {\n return (command, args, options) => {\n const stdout = new PassThrough();\n const stderr = new PassThrough();\n const abortController = new AbortController();\n const child = new EventEmitter() as ChildProcessWithoutNullStreams;\n const state = { closed: false };\n const closeOnce = (\n exitCode: number | null,\n signal: NodeJS.Signals | null\n ): void => {\n if (state.closed) {\n return;\n }\n state.closed = true;\n stdout.end();\n stderr.end();\n Object.assign(child, {\n exitCode,\n signalCode: signal,\n });\n child.emit('close', exitCode, signal);\n };\n Object.assign(child, {\n stdout,\n stderr,\n stdin: new PassThrough(),\n stdio: [null, stdout, stderr],\n killed: false,\n exitCode: null,\n signalCode: null,\n pid: undefined,\n kill: (signal: NodeJS.Signals = 'SIGTERM') => {\n Object.assign(child, { killed: true, signalCode: signal });\n abortController.abort();\n closeOnce(null, signal);\n return true;\n },\n });\n\n void (async (): Promise<void> => {\n const ctx = await getRuntimeContext(config);\n const rendered = [command, ...args].map(quote).join(' ');\n const spawnTimeoutMs = (\n options as {\n [LOCAL_SPAWN_TIMEOUT_MS]?: number;\n }\n )[LOCAL_SPAWN_TIMEOUT_MS];\n const timeoutMs =\n typeof spawnTimeoutMs === 'number' && Number.isFinite(spawnTimeoutMs)\n ? spawnTimeoutMs\n : ctx.timeoutMs;\n const timedCommand = withInSandboxTimeout(rendered, timeoutMs);\n const cwd =\n options.cwd == null ? ctx.workspaceRoot : options.cwd.toString();\n try {\n const result = await ctx.sandbox.exec(timedCommand, {\n cwd,\n env: ctx.env,\n timeout: outerTimeoutMs(timeoutMs),\n signal: abortController.signal,\n });\n if (state.closed) {\n return;\n }\n if (result.stdout) stdout.write(result.stdout);\n if (result.stderr) stderr.write(result.stderr);\n closeOnce(result.exitCode, null);\n } catch (error) {\n if (state.closed) {\n return;\n }\n stderr.write((error as Error).message);\n closeOnce(1, null);\n }\n })();\n\n return child;\n };\n}\n\nexport function createCloudflareLocalExecutionConfig(\n config: t.CloudflareSandboxExecutionConfig\n): t.LocalExecutionConfig {\n const workspaceRoot = getCloudflareWorkspaceRoot(config);\n return {\n cwd: workspaceRoot,\n workspace: { root: workspaceRoot },\n exec: {\n spawn: createCloudflareSpawn(config),\n fs: createCloudflareWorkspaceFS(config),\n sandboxed: true,\n },\n shell: config.shell ?? 'bash',\n timeoutMs: config.timeoutMs,\n maxOutputChars: config.maxOutputChars,\n env: config.env,\n includeCodingTools: config.includeCodingTools,\n compileCheck: config.compileCheck,\n readOnly: config.readOnly,\n allowDangerousCommands: config.allowDangerousCommands,\n bashAst: config.bashAst,\n fileCheckpointing: config.fileCheckpointing,\n maxReadBytes: config.maxReadBytes,\n attachReadAttachments: config.attachReadAttachments,\n maxAttachmentBytes: config.maxAttachmentBytes,\n postEditSyntaxCheck: config.postEditSyntaxCheck,\n };\n}\n\nexport async function validateCloudflareBashCommand(\n command: string,\n args: readonly string[],\n config: t.CloudflareSandboxExecutionConfig\n): Promise<void> {\n const localConfig = createCloudflareLocalExecutionConfig(config);\n const validation = await validateBashCommand(command, localConfig);\n if (!validation.valid) {\n throw new Error(validation.errors.join('\\n'));\n }\n\n if (\n args.length > 0 &&\n config.allowDangerousCommands !== true &&\n DESTRUCTIVE_OP_IN_COMMAND_RE.test(command)\n ) {\n const offending = args.find((arg) => PROTECTED_TARGET_ARG_RE.test(arg));\n if (offending !== undefined) {\n throw new Error(\n `Command matches a destructive command pattern (protected target \"${offending}\" passed via positional arg).`\n );\n }\n }\n}\n\nexport async function executeCloudflareBash(\n command: string,\n config: t.CloudflareSandboxExecutionConfig,\n args: readonly string[] = []\n): Promise<SpawnResult> {\n await validateCloudflareBashCommand(command, args, config);\n const ctx = await getRuntimeContext(config);\n const shellCommand =\n args.length > 0\n ? `${ctx.shell} -lc ${quote(command)} -- ${args.map(quote).join(' ')}`\n : `${ctx.shell} -lc ${quote(command)}`;\n const result = await ctx.sandbox.exec(\n withInSandboxTimeout(shellCommand, ctx.timeoutMs),\n {\n cwd: ctx.workspaceRoot,\n env: ctx.env,\n timeout: outerTimeoutMs(ctx.timeoutMs),\n }\n );\n return {\n stdout: truncateOutput(result.stdout, ctx.maxOutputChars),\n stderr: truncateOutput(result.stderr, ctx.maxOutputChars),\n exitCode: result.exitCode,\n timedOut: isInSandboxTimeoutExit(result.exitCode),\n };\n}\n\nfunction runtimeForCode(\n lang: string,\n tempDir: string,\n code: string,\n args: string[] = [],\n shell = 'bash'\n): RuntimeCommand {\n const fileFor = (name: string): string => path.join(tempDir, name);\n const argText = args.map(quote).join(' ');\n switch (lang) {\n case 'py':\n case 'python':\n return {\n fileName: 'main.py',\n source: code,\n command: `python3 ${quote(fileFor('main.py'))} ${argText}`,\n };\n case 'js':\n case 'javascript':\n return {\n fileName: 'main.js',\n source: code,\n command: `node ${quote(fileFor('main.js'))} ${argText}`,\n };\n case 'ts':\n case 'typescript':\n return {\n fileName: 'main.ts',\n source: code,\n command: `npx --no-install tsx ${quote(fileFor('main.ts'))} ${argText}`,\n };\n case 'php':\n return {\n fileName: 'main.php',\n source: code,\n command: `php ${quote(fileFor('main.php'))} ${argText}`,\n };\n case 'go':\n return {\n fileName: 'main.go',\n source: code,\n command: `go run ${quote(fileFor('main.go'))} ${argText}`,\n };\n case 'rs':\n return {\n fileName: 'main.rs',\n source: code,\n command: `${shell} -lc ${quote(\n `rustc ${quote(fileFor('main.rs'))} -o ${quote(fileFor('main-rs'))} && ${quote(fileFor('main-rs'))} ${argText}`\n )}`,\n };\n case 'c':\n return {\n fileName: 'main.c',\n source: code,\n command: `${shell} -lc ${quote(\n `cc ${quote(fileFor('main.c'))} -o ${quote(fileFor('main-c'))} && ${quote(fileFor('main-c'))} ${argText}`\n )}`,\n };\n case 'cpp':\n return {\n fileName: 'main.cpp',\n source: code,\n command: `${shell} -lc ${quote(\n `c++ ${quote(fileFor('main.cpp'))} -o ${quote(fileFor('main-cpp'))} && ${quote(fileFor('main-cpp'))} ${argText}`\n )}`,\n };\n case 'java':\n return {\n fileName: 'Main.java',\n source: code,\n command: `${shell} -lc ${quote(\n `javac ${quote(fileFor('Main.java'))} && java -cp ${quote(tempDir)} Main ${argText}`\n )}`,\n };\n case 'r':\n return {\n fileName: 'main.R',\n source: code,\n command: `Rscript ${quote(fileFor('main.R'))} ${argText}`,\n };\n case 'd':\n return {\n fileName: 'main.d',\n source: code,\n command: `${shell} -lc ${quote(\n `dmd ${quote(fileFor('main.d'))} -of=${quote(fileFor('main-d'))} && ${quote(fileFor('main-d'))} ${argText}`\n )}`,\n };\n case 'f90':\n return {\n fileName: 'main.f90',\n source: code,\n command: `${shell} -lc ${quote(\n `gfortran ${quote(fileFor('main.f90'))} -o ${quote(fileFor('main-f90'))} && ${quote(fileFor('main-f90'))} ${argText}`\n )}`,\n };\n case 'bash':\n case 'sh':\n return {\n fileName: 'main.sh',\n source: code,\n command: `${shell} -lc ${quote(code)} -- ${argText}`,\n };\n default:\n throw new Error(`Unsupported Cloudflare sandbox runtime: ${lang}`);\n }\n}\n\nexport async function executeCloudflareCode(\n input: { lang: string; code: string; args?: string[] },\n config: t.CloudflareSandboxExecutionConfig\n): Promise<SpawnResult> {\n if (input.lang === 'bash' || input.lang === 'sh') {\n return executeCloudflareBash(input.code, config, input.args ?? []);\n }\n const ctx = await getRuntimeContext(config);\n const id = globalThis.crypto.randomUUID();\n const tempDir = path.join(ctx.workspaceRoot, '.lc-exec', id);\n const runtime = runtimeForCode(\n input.lang,\n tempDir,\n input.code,\n input.args,\n ctx.shell\n );\n await ctx.sandbox.mkdir(tempDir, { recursive: true });\n if (runtime.source != null) {\n await ctx.sandbox.writeFile(\n path.join(tempDir, runtime.fileName),\n runtime.source,\n {\n encoding: 'utf8',\n }\n );\n }\n try {\n const result = await ctx.sandbox.exec(\n withInSandboxTimeout(runtime.command, ctx.timeoutMs),\n {\n cwd: ctx.workspaceRoot,\n env: ctx.env,\n timeout: outerTimeoutMs(ctx.timeoutMs),\n }\n );\n return {\n stdout: truncateOutput(result.stdout, ctx.maxOutputChars),\n stderr: truncateOutput(result.stderr, ctx.maxOutputChars),\n exitCode: result.exitCode,\n timedOut: isInSandboxTimeoutExit(result.exitCode),\n };\n } finally {\n await ctx.sandbox\n .exec(`rm -rf ${quote(tempDir)}`, {\n cwd: ctx.workspaceRoot,\n env: ctx.env,\n timeout: 10000,\n })\n .catch(() => undefined);\n }\n}\n\nexport function formatCloudflareOutput(\n result: SpawnResult,\n cwd: string\n): string {\n let formatted = '';\n if (result.stdout !== '') {\n formatted += `stdout:\\n${result.stdout}\\n`;\n } else {\n formatted += 'stdout: Empty. Ensure you\\'re writing output explicitly.\\n';\n }\n if (result.stderr !== '') {\n formatted += `stderr:\\n${result.stderr}\\n`;\n }\n if (result.exitCode != null && result.exitCode !== 0) {\n formatted += `exit_code: ${result.exitCode}\\n`;\n }\n if (result.timedOut) {\n formatted += 'timed_out: true\\n';\n }\n formatted += `working_directory: ${cwd}`;\n return formatted.trim();\n}\n"],"names":["path","PassThrough","EventEmitter","LOCAL_SPAWN_TIMEOUT_MS","validateBashCommand"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CloudflareSandboxExecutionEngine.cjs","sources":["../../../../src/tools/cloudflare/CloudflareSandboxExecutionEngine.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { PassThrough } from 'stream';\nimport { posix as path } from 'path';\nimport type { ChildProcessWithoutNullStreams } from 'child_process';\nimport type { WriteFileOptions, MakeDirectoryOptions, Stats } from 'fs';\nimport type { FileHandle } from 'fs/promises';\nimport type * as t from '@/types';\nimport {\n LOCAL_SPAWN_TIMEOUT_MS,\n validateBashCommand,\n} from '@/tools/local/LocalExecutionEngine';\nimport type { WorkspaceFS, ReaddirEntry } from '@/tools/local/workspaceFS';\n\nconst DEFAULT_WORKSPACE_ROOT = '/workspace';\nconst DEFAULT_TIMEOUT_MS = 60000;\nconst DEFAULT_MAX_OUTPUT_CHARS = 200000;\nconst PROTECTED_TARGET_ARG_RE = /^(?:\\/|~|\\$\\{?HOME\\}?|\\.)(?:\\/?\\.?\\*|\\/)?$/;\nconst DESTRUCTIVE_OP_IN_COMMAND_RE =\n /\\b(?:rm\\s+-[^\\s]*[rf]|chmod\\s+-R|chown\\s+-R)\\b/;\n\ntype SpawnResult = {\n stdout: string;\n stderr: string;\n exitCode: number | null;\n timedOut: boolean;\n};\n\ntype RuntimeCommand = {\n fileName: string;\n source?: string;\n command: string;\n};\n\ntype SandboxRuntimeContext = {\n sandbox: t.CloudflareSandboxRuntime;\n workspaceRoot: string;\n env?: Record<string, string | undefined>;\n timeoutMs: number;\n maxOutputChars: number;\n shell: string;\n};\n\nconst sandboxFactoryCache = new WeakMap<\n t.CloudflareSandboxExecutionConfig,\n Promise<t.CloudflareSandboxRuntime>\n>();\n\nfunction normalizeWorkspaceRoot(workspaceRoot: string): string {\n const normalized = path.normalize(workspaceRoot);\n return normalized === '/' ? normalized : normalized.replace(/\\/+$/, '');\n}\n\nexport function getCloudflareWorkspaceRoot(\n config?: t.CloudflareSandboxExecutionConfig\n): string {\n return normalizeWorkspaceRoot(\n config?.workspaceRoot ?? DEFAULT_WORKSPACE_ROOT\n );\n}\n\nexport async function resolveCloudflareSandbox(\n config: t.CloudflareSandboxExecutionConfig\n): Promise<t.CloudflareSandboxRuntime> {\n const sandbox = config.sandbox;\n if (typeof sandbox !== 'function') {\n return sandbox;\n }\n let cached = sandboxFactoryCache.get(config);\n if (cached == null) {\n cached = Promise.resolve()\n .then(() => sandbox())\n .catch((error: unknown) => {\n sandboxFactoryCache.delete(config);\n throw error;\n });\n sandboxFactoryCache.set(config, cached);\n }\n return cached;\n}\n\nasync function getRuntimeContext(\n config: t.CloudflareSandboxExecutionConfig\n): Promise<SandboxRuntimeContext> {\n return {\n sandbox: await resolveCloudflareSandbox(config),\n workspaceRoot: getCloudflareWorkspaceRoot(config),\n env: config.env,\n timeoutMs: config.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n maxOutputChars: config.maxOutputChars ?? DEFAULT_MAX_OUTPUT_CHARS,\n shell: config.shell ?? 'bash',\n };\n}\n\nfunction toSandboxPath(filePath: string, workspaceRoot: string): string {\n const raw = filePath === '' ? '.' : filePath;\n const root = normalizeWorkspaceRoot(workspaceRoot);\n const resolved = raw.startsWith('/')\n ? path.normalize(raw)\n : path.resolve(root, raw);\n if (root === '/') {\n return resolved;\n }\n if (resolved === root || resolved.startsWith(`${root}/`)) {\n return resolved;\n }\n throw new Error(\n `Path is outside the Cloudflare sandbox workspace: ${filePath}`\n );\n}\n\nfunction quote(value: string): string {\n if (value === '') {\n return '\\'\\'';\n }\n if (/^[A-Za-z0-9_/:=.,@%+-]+$/.test(value)) {\n return value;\n }\n return `'${value.replace(/'/g, '\\'\\\\\\'\\'')}'`;\n}\n\nfunction withInSandboxTimeout(command: string, timeoutMs: number): string {\n const timeoutSeconds = Math.max(1, Math.ceil(timeoutMs / 1000));\n return `timeout -k 2s ${timeoutSeconds}s ${command}`;\n}\n\nfunction outerTimeoutMs(timeoutMs: number): number {\n return timeoutMs + 5000;\n}\n\nfunction isInSandboxTimeoutExit(exitCode: number | null): boolean {\n return exitCode === 124 || exitCode === 137;\n}\n\nfunction truncateOutput(value: string, maxChars: number): string {\n if (maxChars <= 0 || value.length <= maxChars) {\n return value;\n }\n const head = Math.max(Math.floor(maxChars / 2), 0);\n const tail = Math.max(maxChars - head, 0);\n return `${value.slice(0, head)}\\n...[truncated ${value.length - maxChars} chars]...\\n${value.slice(value.length - tail)}`;\n}\n\nasync function readStream(stream: ReadableStream<Uint8Array>): Promise<Buffer> {\n const reader = stream.getReader();\n const chunks: Uint8Array[] = [];\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n }\n } finally {\n reader.releaseLock();\n }\n return Buffer.concat(chunks.map((chunk) => Buffer.from(chunk)));\n}\n\nasync function normalizeReadFileContent(\n result: t.CloudflareSandboxReadFileResult\n): Promise<Buffer> {\n if (typeof result === 'string') {\n return Buffer.from(result, 'utf8');\n }\n if (Buffer.isBuffer(result)) {\n return result;\n }\n if (result instanceof Uint8Array) {\n return Buffer.from(result);\n }\n const content = result.content;\n if (typeof content === 'string') {\n if (result.encoding === 'base64') {\n return Buffer.from(content, 'base64');\n }\n return Buffer.from(content, 'utf8');\n }\n if (Buffer.isBuffer(content)) {\n return content;\n }\n if (content instanceof Uint8Array) {\n return Buffer.from(content);\n }\n return readStream(content);\n}\n\nfunction bytesToStream(bytes: Uint8Array): ReadableStream<Uint8Array> {\n return new ReadableStream<Uint8Array>({\n start(controller): void {\n controller.enqueue(bytes);\n controller.close();\n },\n });\n}\n\nfunction normalizeWriteFileContent(content: string | Buffer | Uint8Array): {\n content: string | ReadableStream<Uint8Array>;\n options?: { encoding?: string };\n} {\n if (typeof content === 'string') {\n return { content, options: { encoding: 'utf8' } };\n }\n return { content: bytesToStream(content) };\n}\n\nfunction createStats(info: {\n size?: number;\n type?: t.CloudflareSandboxFileInfo['type'];\n}): Stats {\n const type = info.type ?? 'file';\n const now = new Date();\n return {\n size: info.size ?? 0,\n isFile: () => type === 'file',\n isDirectory: () => type === 'directory',\n isSymbolicLink: () => type === 'symlink',\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isFIFO: () => false,\n isSocket: () => false,\n dev: 0,\n ino: 0,\n mode: 0,\n nlink: 1,\n uid: 0,\n gid: 0,\n rdev: 0,\n blksize: 0,\n blocks: 0,\n atimeMs: now.getTime(),\n mtimeMs: now.getTime(),\n ctimeMs: now.getTime(),\n birthtimeMs: now.getTime(),\n atime: now,\n mtime: now,\n ctime: now,\n birthtime: now,\n } as Stats;\n}\n\nfunction normalizeFileList(\n result: t.CloudflareSandboxListFilesResult\n): t.CloudflareSandboxFileInfo[] {\n return Array.isArray(result) ? result : result.files;\n}\n\nfunction entryNameFor(\n info: t.CloudflareSandboxFileInfo,\n parentPath: string\n): string {\n if (info.name !== '') {\n return info.name.includes('/') ? path.basename(info.name) : info.name;\n }\n if (info.absolutePath != null && info.absolutePath !== '') {\n return path.basename(info.absolutePath);\n }\n if (info.relativePath != null && info.relativePath !== '') {\n return path.basename(info.relativePath);\n }\n return path.basename(parentPath);\n}\n\nfunction entryAbsolutePath(\n info: t.CloudflareSandboxFileInfo,\n parentPath: string\n): string {\n if (info.absolutePath != null && info.absolutePath !== '') {\n return path.normalize(info.absolutePath);\n }\n if (info.relativePath != null && info.relativePath !== '') {\n return path.resolve(parentPath, info.relativePath);\n }\n return path.resolve(parentPath, info.name);\n}\n\nfunction createDirent(info: t.CloudflareSandboxFileInfo): ReaddirEntry {\n return {\n name: entryNameFor(info, ''),\n isFile: () => (info.type ?? 'file') === 'file',\n isDirectory: () => info.type === 'directory',\n isSymbolicLink: () => info.type === 'symlink',\n };\n}\n\nasync function findChildInfo(\n sandbox: t.CloudflareSandboxRuntime,\n filePath: string\n): Promise<t.CloudflareSandboxFileInfo | undefined> {\n const parent = path.dirname(filePath);\n const basename = path.basename(filePath);\n const entries = normalizeFileList(\n await sandbox.listFiles(parent, { includeHidden: true })\n );\n return entries.find((entry) => {\n const absolute = entryAbsolutePath(entry, parent);\n return absolute === filePath || entryNameFor(entry, parent) === basename;\n });\n}\n\nexport function createCloudflareWorkspaceFS(\n config: t.CloudflareSandboxExecutionConfig\n): WorkspaceFS {\n const workspaceRoot = getCloudflareWorkspaceRoot(config);\n\n const fs: WorkspaceFS = {\n readFile: (async (filePath: string, encoding?: 'utf8') => {\n const sandbox = await resolveCloudflareSandbox(config);\n const resolved = toSandboxPath(filePath, workspaceRoot);\n const buffer = await normalizeReadFileContent(\n await sandbox.readFile(resolved, encoding ? { encoding } : undefined)\n );\n return encoding != null ? buffer.toString(encoding) : buffer;\n }) as WorkspaceFS['readFile'],\n writeFile: async (\n filePath: string,\n content: string | Buffer,\n _options?: WriteFileOptions\n ) => {\n const sandbox = await resolveCloudflareSandbox(config);\n const resolved = toSandboxPath(filePath, workspaceRoot);\n const normalized = normalizeWriteFileContent(content);\n await sandbox.writeFile(resolved, normalized.content, normalized.options);\n },\n stat: async (filePath: string) => {\n const sandbox = await resolveCloudflareSandbox(config);\n const resolved = toSandboxPath(filePath, workspaceRoot);\n if (resolved === workspaceRoot) {\n const entries = normalizeFileList(\n await sandbox.listFiles(resolved, { includeHidden: true })\n );\n return createStats({ size: entries.length, type: 'directory' });\n }\n const info = await findChildInfo(sandbox, resolved);\n if (info != null) {\n return createStats({ size: info.size, type: info.type });\n }\n try {\n const entries = normalizeFileList(\n await sandbox.listFiles(resolved, { includeHidden: true })\n );\n return createStats({ size: entries.length, type: 'directory' });\n } catch {\n const buffer = await normalizeReadFileContent(\n await sandbox.readFile(resolved)\n );\n return createStats({ size: buffer.length, type: 'file' });\n }\n },\n readdir: (async (filePath: string, options?: { withFileTypes: true }) => {\n const sandbox = await resolveCloudflareSandbox(config);\n const resolved = toSandboxPath(filePath, workspaceRoot);\n const entries = normalizeFileList(\n await sandbox.listFiles(resolved, { includeHidden: true })\n );\n if (options?.withFileTypes === true) {\n return entries.map(createDirent);\n }\n return entries.map((entry) => entryNameFor(entry, resolved));\n }) as WorkspaceFS['readdir'],\n mkdir: async (filePath: string, options?: MakeDirectoryOptions) => {\n const sandbox = await resolveCloudflareSandbox(config);\n await sandbox.mkdir(toSandboxPath(filePath, workspaceRoot), {\n recursive: options?.recursive,\n });\n },\n realpath: async (filePath: string) =>\n toSandboxPath(filePath, workspaceRoot),\n unlink: async (filePath: string) => {\n const sandbox = await resolveCloudflareSandbox(config);\n await sandbox.deleteFile(toSandboxPath(filePath, workspaceRoot));\n },\n open: async (filePath: string, _flags: 'r') => {\n const sandbox = await resolveCloudflareSandbox(config);\n const resolved = toSandboxPath(filePath, workspaceRoot);\n const buffer = await normalizeReadFileContent(\n await sandbox.readFile(resolved)\n );\n return {\n read: async (\n target: Buffer,\n offset: number,\n length: number,\n position: number\n ) => {\n const start = Math.max(position, 0);\n const slice = buffer.subarray(start, start + length);\n slice.copy(target, offset);\n return { bytesRead: slice.length, buffer: target };\n },\n close: async () => undefined,\n } as unknown as FileHandle;\n },\n };\n\n return fs;\n}\n\nfunction createCloudflareSpawn(\n config: t.CloudflareSandboxExecutionConfig\n): t.LocalSpawn {\n return (command, args, options) => {\n const stdout = new PassThrough();\n const stderr = new PassThrough();\n const child = new EventEmitter() as ChildProcessWithoutNullStreams;\n const abortController = new AbortController();\n const state = { closed: false };\n const closeOnce = (\n exitCode: number | null,\n signal: NodeJS.Signals | null\n ): void => {\n if (state.closed) {\n return;\n }\n state.closed = true;\n stdout.end();\n stderr.end();\n Object.assign(child, {\n exitCode,\n signalCode: signal,\n });\n child.emit('close', exitCode, signal);\n };\n Object.assign(child, {\n stdout,\n stderr,\n stdin: new PassThrough(),\n stdio: [null, stdout, stderr],\n killed: false,\n exitCode: null,\n signalCode: null,\n pid: undefined,\n kill: (signal: NodeJS.Signals = 'SIGTERM') => {\n Object.assign(child, { killed: true, signalCode: signal });\n abortController.abort();\n closeOnce(null, signal);\n return true;\n },\n });\n\n void (async (): Promise<void> => {\n const ctx = await getRuntimeContext(config);\n const rendered = [command, ...args].map(quote).join(' ');\n const spawnTimeoutMs = (\n options as {\n [LOCAL_SPAWN_TIMEOUT_MS]?: number;\n }\n )[LOCAL_SPAWN_TIMEOUT_MS];\n const timeoutMs =\n typeof spawnTimeoutMs === 'number' && Number.isFinite(spawnTimeoutMs)\n ? spawnTimeoutMs\n : ctx.timeoutMs;\n const timedCommand = withInSandboxTimeout(rendered, timeoutMs);\n const cwd =\n options.cwd == null ? ctx.workspaceRoot : options.cwd.toString();\n if (state.closed) {\n return;\n }\n const execOptions: t.CloudflareSandboxExecOptions = {\n cwd,\n env: ctx.env,\n timeout: outerTimeoutMs(timeoutMs),\n };\n if (ctx.sandbox.supportsExecSignal === true) {\n execOptions.signal = abortController.signal;\n }\n try {\n const result = await ctx.sandbox.exec(timedCommand, execOptions);\n if (state.closed) {\n return;\n }\n if (result.stdout) stdout.write(result.stdout);\n if (result.stderr) stderr.write(result.stderr);\n closeOnce(result.exitCode, null);\n } catch (error) {\n if (state.closed) {\n return;\n }\n stderr.write((error as Error).message);\n closeOnce(1, null);\n }\n })();\n\n return child;\n };\n}\n\nexport function createCloudflareLocalExecutionConfig(\n config: t.CloudflareSandboxExecutionConfig\n): t.LocalExecutionConfig {\n const workspaceRoot = getCloudflareWorkspaceRoot(config);\n return {\n cwd: workspaceRoot,\n workspace: { root: workspaceRoot },\n exec: {\n spawn: createCloudflareSpawn(config),\n fs: createCloudflareWorkspaceFS(config),\n sandboxed: true,\n },\n shell: config.shell ?? 'bash',\n timeoutMs: config.timeoutMs,\n maxOutputChars: config.maxOutputChars,\n env: config.env,\n includeCodingTools: config.includeCodingTools,\n compileCheck: config.compileCheck,\n readOnly: config.readOnly,\n allowDangerousCommands: config.allowDangerousCommands,\n bashAst: config.bashAst,\n fileCheckpointing: config.fileCheckpointing,\n maxReadBytes: config.maxReadBytes,\n attachReadAttachments: config.attachReadAttachments,\n maxAttachmentBytes: config.maxAttachmentBytes,\n postEditSyntaxCheck: config.postEditSyntaxCheck,\n };\n}\n\nexport async function validateCloudflareBashCommand(\n command: string,\n args: readonly string[],\n config: t.CloudflareSandboxExecutionConfig\n): Promise<void> {\n const localConfig = createCloudflareLocalExecutionConfig(config);\n const validation = await validateBashCommand(command, localConfig);\n if (!validation.valid) {\n throw new Error(validation.errors.join('\\n'));\n }\n\n if (\n args.length > 0 &&\n config.allowDangerousCommands !== true &&\n DESTRUCTIVE_OP_IN_COMMAND_RE.test(command)\n ) {\n const offending = args.find((arg) => PROTECTED_TARGET_ARG_RE.test(arg));\n if (offending !== undefined) {\n throw new Error(\n `Command matches a destructive command pattern (protected target \"${offending}\" passed via positional arg).`\n );\n }\n }\n}\n\nexport async function executeCloudflareBash(\n command: string,\n config: t.CloudflareSandboxExecutionConfig,\n args: readonly string[] = []\n): Promise<SpawnResult> {\n await validateCloudflareBashCommand(command, args, config);\n const ctx = await getRuntimeContext(config);\n const shellCommand =\n args.length > 0\n ? `${ctx.shell} -lc ${quote(command)} -- ${args.map(quote).join(' ')}`\n : `${ctx.shell} -lc ${quote(command)}`;\n const result = await ctx.sandbox.exec(\n withInSandboxTimeout(shellCommand, ctx.timeoutMs),\n {\n cwd: ctx.workspaceRoot,\n env: ctx.env,\n timeout: outerTimeoutMs(ctx.timeoutMs),\n }\n );\n return {\n stdout: truncateOutput(result.stdout, ctx.maxOutputChars),\n stderr: truncateOutput(result.stderr, ctx.maxOutputChars),\n exitCode: result.exitCode,\n timedOut: isInSandboxTimeoutExit(result.exitCode),\n };\n}\n\nfunction runtimeForCode(\n lang: string,\n tempDir: string,\n code: string,\n args: string[] = [],\n shell = 'bash'\n): RuntimeCommand {\n const fileFor = (name: string): string => path.join(tempDir, name);\n const argText = args.map(quote).join(' ');\n switch (lang) {\n case 'py':\n case 'python':\n return {\n fileName: 'main.py',\n source: code,\n command: `python3 ${quote(fileFor('main.py'))} ${argText}`,\n };\n case 'js':\n case 'javascript':\n return {\n fileName: 'main.js',\n source: code,\n command: `node ${quote(fileFor('main.js'))} ${argText}`,\n };\n case 'ts':\n case 'typescript':\n return {\n fileName: 'main.ts',\n source: code,\n command: `npx --no-install tsx ${quote(fileFor('main.ts'))} ${argText}`,\n };\n case 'php':\n return {\n fileName: 'main.php',\n source: code,\n command: `php ${quote(fileFor('main.php'))} ${argText}`,\n };\n case 'go':\n return {\n fileName: 'main.go',\n source: code,\n command: `go run ${quote(fileFor('main.go'))} ${argText}`,\n };\n case 'rs':\n return {\n fileName: 'main.rs',\n source: code,\n command: `${shell} -lc ${quote(\n `rustc ${quote(fileFor('main.rs'))} -o ${quote(fileFor('main-rs'))} && ${quote(fileFor('main-rs'))} ${argText}`\n )}`,\n };\n case 'c':\n return {\n fileName: 'main.c',\n source: code,\n command: `${shell} -lc ${quote(\n `cc ${quote(fileFor('main.c'))} -o ${quote(fileFor('main-c'))} && ${quote(fileFor('main-c'))} ${argText}`\n )}`,\n };\n case 'cpp':\n return {\n fileName: 'main.cpp',\n source: code,\n command: `${shell} -lc ${quote(\n `c++ ${quote(fileFor('main.cpp'))} -o ${quote(fileFor('main-cpp'))} && ${quote(fileFor('main-cpp'))} ${argText}`\n )}`,\n };\n case 'java':\n return {\n fileName: 'Main.java',\n source: code,\n command: `${shell} -lc ${quote(\n `javac ${quote(fileFor('Main.java'))} && java -cp ${quote(tempDir)} Main ${argText}`\n )}`,\n };\n case 'r':\n return {\n fileName: 'main.R',\n source: code,\n command: `Rscript ${quote(fileFor('main.R'))} ${argText}`,\n };\n case 'd':\n return {\n fileName: 'main.d',\n source: code,\n command: `${shell} -lc ${quote(\n `dmd ${quote(fileFor('main.d'))} -of=${quote(fileFor('main-d'))} && ${quote(fileFor('main-d'))} ${argText}`\n )}`,\n };\n case 'f90':\n return {\n fileName: 'main.f90',\n source: code,\n command: `${shell} -lc ${quote(\n `gfortran ${quote(fileFor('main.f90'))} -o ${quote(fileFor('main-f90'))} && ${quote(fileFor('main-f90'))} ${argText}`\n )}`,\n };\n case 'bash':\n case 'sh':\n return {\n fileName: 'main.sh',\n source: code,\n command: `${shell} -lc ${quote(code)} -- ${argText}`,\n };\n default:\n throw new Error(`Unsupported Cloudflare sandbox runtime: ${lang}`);\n }\n}\n\nexport async function executeCloudflareCode(\n input: { lang: string; code: string; args?: string[] },\n config: t.CloudflareSandboxExecutionConfig\n): Promise<SpawnResult> {\n if (input.lang === 'bash' || input.lang === 'sh') {\n return executeCloudflareBash(input.code, config, input.args ?? []);\n }\n const ctx = await getRuntimeContext(config);\n const id = globalThis.crypto.randomUUID();\n const tempDir = path.join(ctx.workspaceRoot, '.lc-exec', id);\n const runtime = runtimeForCode(\n input.lang,\n tempDir,\n input.code,\n input.args,\n ctx.shell\n );\n await ctx.sandbox.mkdir(tempDir, { recursive: true });\n if (runtime.source != null) {\n await ctx.sandbox.writeFile(\n path.join(tempDir, runtime.fileName),\n runtime.source,\n {\n encoding: 'utf8',\n }\n );\n }\n try {\n const result = await ctx.sandbox.exec(\n withInSandboxTimeout(runtime.command, ctx.timeoutMs),\n {\n cwd: ctx.workspaceRoot,\n env: ctx.env,\n timeout: outerTimeoutMs(ctx.timeoutMs),\n }\n );\n return {\n stdout: truncateOutput(result.stdout, ctx.maxOutputChars),\n stderr: truncateOutput(result.stderr, ctx.maxOutputChars),\n exitCode: result.exitCode,\n timedOut: isInSandboxTimeoutExit(result.exitCode),\n };\n } finally {\n await ctx.sandbox\n .exec(`rm -rf ${quote(tempDir)}`, {\n cwd: ctx.workspaceRoot,\n env: ctx.env,\n timeout: 10000,\n })\n .catch(() => undefined);\n }\n}\n\nexport function formatCloudflareOutput(\n result: SpawnResult,\n cwd: string\n): string {\n let formatted = '';\n if (result.stdout !== '') {\n formatted += `stdout:\\n${result.stdout}\\n`;\n } else {\n formatted += 'stdout: Empty. Ensure you\\'re writing output explicitly.\\n';\n }\n if (result.stderr !== '') {\n formatted += `stderr:\\n${result.stderr}\\n`;\n }\n if (result.exitCode != null && result.exitCode !== 0) {\n formatted += `exit_code: ${result.exitCode}\\n`;\n }\n if (result.timedOut) {\n formatted += 'timed_out: true\\n';\n }\n formatted += `working_directory: ${cwd}`;\n return formatted.trim();\n}\n"],"names":["path","PassThrough","EventEmitter","LOCAL_SPAWN_TIMEOUT_MS","validateBashCommand"],"mappings":";;;;;;;AAaA,MAAM,sBAAsB,GAAG,YAAY;AAC3C,MAAM,kBAAkB,GAAG,KAAK;AAChC,MAAM,wBAAwB,GAAG,MAAM;AACvC,MAAM,uBAAuB,GAAG,4CAA4C;AAC5E,MAAM,4BAA4B,GAChC,gDAAgD;AAwBlD,MAAM,mBAAmB,GAAG,IAAI,OAAO,EAGpC;AAEH,SAAS,sBAAsB,CAAC,aAAqB,EAAA;IACnD,MAAM,UAAU,GAAGA,UAAI,CAAC,SAAS,CAAC,aAAa,CAAC;AAChD,IAAA,OAAO,UAAU,KAAK,GAAG,GAAG,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;AACzE;AAEM,SAAU,0BAA0B,CACxC,MAA2C,EAAA;IAE3C,OAAO,sBAAsB,CAC3B,MAAM,EAAE,aAAa,IAAI,sBAAsB,CAChD;AACH;AAEO,eAAe,wBAAwB,CAC5C,MAA0C,EAAA;AAE1C,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;AAC9B,IAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AACjC,QAAA,OAAO,OAAO;IAChB;IACA,IAAI,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC;AAC5C,IAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,QAAA,MAAM,GAAG,OAAO,CAAC,OAAO;AACrB,aAAA,IAAI,CAAC,MAAM,OAAO,EAAE;AACpB,aAAA,KAAK,CAAC,CAAC,KAAc,KAAI;AACxB,YAAA,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC;AAClC,YAAA,MAAM,KAAK;AACb,QAAA,CAAC,CAAC;AACJ,QAAA,mBAAmB,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IACzC;AACA,IAAA,OAAO,MAAM;AACf;AAEA,eAAe,iBAAiB,CAC9B,MAA0C,EAAA;IAE1C,OAAO;AACL,QAAA,OAAO,EAAE,MAAM,wBAAwB,CAAC,MAAM,CAAC;AAC/C,QAAA,aAAa,EAAE,0BAA0B,CAAC,MAAM,CAAC;QACjD,GAAG,EAAE,MAAM,CAAC,GAAG;AACf,QAAA,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,kBAAkB;AACjD,QAAA,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,wBAAwB;AACjE,QAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM;KAC9B;AACH;AAEA,SAAS,aAAa,CAAC,QAAgB,EAAE,aAAqB,EAAA;AAC5D,IAAA,MAAM,GAAG,GAAG,QAAQ,KAAK,EAAE,GAAG,GAAG,GAAG,QAAQ;AAC5C,IAAA,MAAM,IAAI,GAAG,sBAAsB,CAAC,aAAa,CAAC;AAClD,IAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG;AACjC,UAAEA,UAAI,CAAC,SAAS,CAAC,GAAG;UAClBA,UAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AAC3B,IAAA,IAAI,IAAI,KAAK,GAAG,EAAE;AAChB,QAAA,OAAO,QAAQ;IACjB;AACA,IAAA,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAA,EAAG,IAAI,CAAA,CAAA,CAAG,CAAC,EAAE;AACxD,QAAA,OAAO,QAAQ;IACjB;AACA,IAAA,MAAM,IAAI,KAAK,CACb,qDAAqD,QAAQ,CAAA,CAAE,CAChE;AACH;AAEA,SAAS,KAAK,CAAC,KAAa,EAAA;AAC1B,IAAA,IAAI,KAAK,KAAK,EAAE,EAAE;AAChB,QAAA,OAAO,MAAM;IACf;AACA,IAAA,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC1C,QAAA,OAAO,KAAK;IACd;IACA,OAAO,CAAA,CAAA,EAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA,CAAA,CAAG;AAC/C;AAEA,SAAS,oBAAoB,CAAC,OAAe,EAAE,SAAiB,EAAA;AAC9D,IAAA,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;AAC/D,IAAA,OAAO,CAAA,cAAA,EAAiB,cAAc,CAAA,EAAA,EAAK,OAAO,EAAE;AACtD;AAEA,SAAS,cAAc,CAAC,SAAiB,EAAA;IACvC,OAAO,SAAS,GAAG,IAAI;AACzB;AAEA,SAAS,sBAAsB,CAAC,QAAuB,EAAA;AACrD,IAAA,OAAO,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG;AAC7C;AAEA,SAAS,cAAc,CAAC,KAAa,EAAE,QAAgB,EAAA;IACrD,IAAI,QAAQ,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE;AAC7C,QAAA,OAAO,KAAK;IACd;AACA,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAClD,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC;IACzC,OAAO,CAAA,EAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA,gBAAA,EAAmB,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAA,YAAA,EAAe,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA,CAAE;AAC3H;AAEA,eAAe,UAAU,CAAC,MAAkC,EAAA;AAC1D,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE;IACjC,MAAM,MAAM,GAAiB,EAAE;AAC/B,IAAA,IAAI;AACF,QAAA,SAAS;YACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE;AAC3C,YAAA,IAAI,IAAI;gBAAE;AACV,YAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QACpB;IACF;YAAU;QACR,MAAM,CAAC,WAAW,EAAE;IACtB;IACA,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE;AAEA,eAAe,wBAAwB,CACrC,MAAyC,EAAA;AAEzC,IAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;IACpC;AACA,IAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC3B,QAAA,OAAO,MAAM;IACf;AACA,IAAA,IAAI,MAAM,YAAY,UAAU,EAAE;AAChC,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;IAC5B;AACA,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;AAC9B,IAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC/B,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAChC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;QACvC;QACA,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;IACrC;AACA,IAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC5B,QAAA,OAAO,OAAO;IAChB;AACA,IAAA,IAAI,OAAO,YAAY,UAAU,EAAE;AACjC,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;IAC7B;AACA,IAAA,OAAO,UAAU,CAAC,OAAO,CAAC;AAC5B;AAEA,SAAS,aAAa,CAAC,KAAiB,EAAA;IACtC,OAAO,IAAI,cAAc,CAAa;AACpC,QAAA,KAAK,CAAC,UAAU,EAAA;AACd,YAAA,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;YACzB,UAAU,CAAC,KAAK,EAAE;QACpB,CAAC;AACF,KAAA,CAAC;AACJ;AAEA,SAAS,yBAAyB,CAAC,OAAqC,EAAA;AAItE,IAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC/B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;IACnD;IACA,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE;AAC5C;AAEA,SAAS,WAAW,CAAC,IAGpB,EAAA;AACC,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,MAAM;AAChC,IAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;IACtB,OAAO;AACL,QAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;AACpB,QAAA,MAAM,EAAE,MAAM,IAAI,KAAK,MAAM;AAC7B,QAAA,WAAW,EAAE,MAAM,IAAI,KAAK,WAAW;AACvC,QAAA,cAAc,EAAE,MAAM,IAAI,KAAK,SAAS;AACxC,QAAA,aAAa,EAAE,MAAM,KAAK;AAC1B,QAAA,iBAAiB,EAAE,MAAM,KAAK;AAC9B,QAAA,MAAM,EAAE,MAAM,KAAK;AACnB,QAAA,QAAQ,EAAE,MAAM,KAAK;AACrB,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,MAAM,EAAE,CAAC;AACT,QAAA,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;AACtB,QAAA,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;AACtB,QAAA,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;AACtB,QAAA,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE;AAC1B,QAAA,KAAK,EAAE,GAAG;AACV,QAAA,KAAK,EAAE,GAAG;AACV,QAAA,KAAK,EAAE,GAAG;AACV,QAAA,SAAS,EAAE,GAAG;KACN;AACZ;AAEA,SAAS,iBAAiB,CACxB,MAA0C,EAAA;AAE1C,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,KAAK;AACtD;AAEA,SAAS,YAAY,CACnB,IAAiC,EACjC,UAAkB,EAAA;AAElB,IAAA,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,EAAE;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAGA,UAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;IACvE;AACA,IAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,KAAK,EAAE,EAAE;QACzD,OAAOA,UAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;IACzC;AACA,IAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,KAAK,EAAE,EAAE;QACzD,OAAOA,UAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;IACzC;AACA,IAAA,OAAOA,UAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AAClC;AAEA,SAAS,iBAAiB,CACxB,IAAiC,EACjC,UAAkB,EAAA;AAElB,IAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,KAAK,EAAE,EAAE;QACzD,OAAOA,UAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;IAC1C;AACA,IAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,KAAK,EAAE,EAAE;QACzD,OAAOA,UAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC;IACpD;IACA,OAAOA,UAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;AAC5C;AAEA,SAAS,YAAY,CAAC,IAAiC,EAAA;IACrD,OAAO;AACL,QAAA,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;AAC5B,QAAA,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,MAAM,MAAM;QAC9C,WAAW,EAAE,MAAM,IAAI,CAAC,IAAI,KAAK,WAAW;QAC5C,cAAc,EAAE,MAAM,IAAI,CAAC,IAAI,KAAK,SAAS;KAC9C;AACH;AAEA,eAAe,aAAa,CAC1B,OAAmC,EACnC,QAAgB,EAAA;IAEhB,MAAM,MAAM,GAAGA,UAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IACrC,MAAM,QAAQ,GAAGA,UAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACxC,IAAA,MAAM,OAAO,GAAG,iBAAiB,CAC/B,MAAM,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CACzD;AACD,IAAA,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;QAC5B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC;AACjD,QAAA,OAAO,QAAQ,KAAK,QAAQ,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,QAAQ;AAC1E,IAAA,CAAC,CAAC;AACJ;AAEM,SAAU,2BAA2B,CACzC,MAA0C,EAAA;AAE1C,IAAA,MAAM,aAAa,GAAG,0BAA0B,CAAC,MAAM,CAAC;AAExD,IAAA,MAAM,EAAE,GAAgB;QACtB,QAAQ,GAAG,OAAO,QAAgB,EAAE,QAAiB,KAAI;AACvD,YAAA,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,MAAM,CAAC;YACtD,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC3C,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,CACtE;AACD,YAAA,OAAO,QAAQ,IAAI,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM;AAC9D,QAAA,CAAC,CAA4B;QAC7B,SAAS,EAAE,OACT,QAAgB,EAChB,OAAwB,EACxB,QAA2B,KACzB;AACF,YAAA,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,MAAM,CAAC;YACtD,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC;AACvD,YAAA,MAAM,UAAU,GAAG,yBAAyB,CAAC,OAAO,CAAC;AACrD,YAAA,MAAM,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC;QAC3E,CAAC;AACD,QAAA,IAAI,EAAE,OAAO,QAAgB,KAAI;AAC/B,YAAA,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,MAAM,CAAC;YACtD,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC;AACvD,YAAA,IAAI,QAAQ,KAAK,aAAa,EAAE;AAC9B,gBAAA,MAAM,OAAO,GAAG,iBAAiB,CAC/B,MAAM,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAC3D;AACD,gBAAA,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;YACjE;YACA,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC;AACnD,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,gBAAA,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1D;AACA,YAAA,IAAI;AACF,gBAAA,MAAM,OAAO,GAAG,iBAAiB,CAC/B,MAAM,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAC3D;AACD,gBAAA,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;YACjE;AAAE,YAAA,MAAM;AACN,gBAAA,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC3C,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACjC;AACD,gBAAA,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YAC3D;QACF,CAAC;QACD,OAAO,GAAG,OAAO,QAAgB,EAAE,OAAiC,KAAI;AACtE,YAAA,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,MAAM,CAAC;YACtD,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC;AACvD,YAAA,MAAM,OAAO,GAAG,iBAAiB,CAC/B,MAAM,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAC3D;AACD,YAAA,IAAI,OAAO,EAAE,aAAa,KAAK,IAAI,EAAE;AACnC,gBAAA,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;YAClC;AACA,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC9D,QAAA,CAAC,CAA2B;AAC5B,QAAA,KAAK,EAAE,OAAO,QAAgB,EAAE,OAA8B,KAAI;AAChE,YAAA,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,MAAM,CAAC;YACtD,MAAM,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE;gBAC1D,SAAS,EAAE,OAAO,EAAE,SAAS;AAC9B,aAAA,CAAC;QACJ,CAAC;AACD,QAAA,QAAQ,EAAE,OAAO,QAAgB,KAC/B,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC;AACxC,QAAA,MAAM,EAAE,OAAO,QAAgB,KAAI;AACjC,YAAA,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,MAAM,CAAC;YACtD,MAAM,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAClE,CAAC;AACD,QAAA,IAAI,EAAE,OAAO,QAAgB,EAAE,MAAW,KAAI;AAC5C,YAAA,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,MAAM,CAAC;YACtD,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC;AACvD,YAAA,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC3C,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACjC;YACD,OAAO;gBACL,IAAI,EAAE,OACJ,MAAc,EACd,MAAc,EACd,MAAc,EACd,QAAgB,KACd;oBACF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACnC,oBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;AACpD,oBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;oBAC1B,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;gBACpD,CAAC;AACD,gBAAA,KAAK,EAAE,YAAY,SAAS;aACJ;QAC5B,CAAC;KACF;AAED,IAAA,OAAO,EAAE;AACX;AAEA,SAAS,qBAAqB,CAC5B,MAA0C,EAAA;AAE1C,IAAA,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,KAAI;AAChC,QAAA,MAAM,MAAM,GAAG,IAAIC,kBAAW,EAAE;AAChC,QAAA,MAAM,MAAM,GAAG,IAAIA,kBAAW,EAAE;AAChC,QAAA,MAAM,KAAK,GAAG,IAAIC,mBAAY,EAAoC;AAClE,QAAA,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE;AAC7C,QAAA,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE;AAC/B,QAAA,MAAM,SAAS,GAAG,CAChB,QAAuB,EACvB,MAA6B,KACrB;AACR,YAAA,IAAI,KAAK,CAAC,MAAM,EAAE;gBAChB;YACF;AACA,YAAA,KAAK,CAAC,MAAM,GAAG,IAAI;YACnB,MAAM,CAAC,GAAG,EAAE;YACZ,MAAM,CAAC,GAAG,EAAE;AACZ,YAAA,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;gBACnB,QAAQ;AACR,gBAAA,UAAU,EAAE,MAAM;AACnB,aAAA,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;AACvC,QAAA,CAAC;AACD,QAAA,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;YACnB,MAAM;YACN,MAAM;YACN,KAAK,EAAE,IAAID,kBAAW,EAAE;AACxB,YAAA,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC;AAC7B,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,GAAG,EAAE,SAAS;AACd,YAAA,IAAI,EAAE,CAAC,MAAA,GAAyB,SAAS,KAAI;AAC3C,gBAAA,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;gBAC1D,eAAe,CAAC,KAAK,EAAE;AACvB,gBAAA,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;AACvB,gBAAA,OAAO,IAAI;YACb,CAAC;AACF,SAAA,CAAC;QAEF,KAAK,CAAC,YAA0B;AAC9B,YAAA,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC;AAC3C,YAAA,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACxD,YAAA,MAAM,cAAc,GAClB,OAGD,CAACE,2CAAsB,CAAC;AACzB,YAAA,MAAM,SAAS,GACb,OAAO,cAAc,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc;AAClE,kBAAE;AACF,kBAAE,GAAG,CAAC,SAAS;YACnB,MAAM,YAAY,GAAG,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC;YAC9D,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;AAClE,YAAA,IAAI,KAAK,CAAC,MAAM,EAAE;gBAChB;YACF;AACA,YAAA,MAAM,WAAW,GAAmC;gBAClD,GAAG;gBACH,GAAG,EAAE,GAAG,CAAC,GAAG;AACZ,gBAAA,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC;aACnC;YACD,IAAI,GAAG,CAAC,OAAO,CAAC,kBAAkB,KAAK,IAAI,EAAE;AAC3C,gBAAA,WAAW,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM;YAC7C;AACA,YAAA,IAAI;AACF,gBAAA,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC;AAChE,gBAAA,IAAI,KAAK,CAAC,MAAM,EAAE;oBAChB;gBACF;gBACA,IAAI,MAAM,CAAC,MAAM;AAAE,oBAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC9C,IAAI,MAAM,CAAC,MAAM;AAAE,oBAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9C,gBAAA,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC;YAClC;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,IAAI,KAAK,CAAC,MAAM,EAAE;oBAChB;gBACF;AACA,gBAAA,MAAM,CAAC,KAAK,CAAE,KAAe,CAAC,OAAO,CAAC;AACtC,gBAAA,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;YACpB;QACF,CAAC,GAAG;AAEJ,QAAA,OAAO,KAAK;AACd,IAAA,CAAC;AACH;AAEM,SAAU,oCAAoC,CAClD,MAA0C,EAAA;AAE1C,IAAA,MAAM,aAAa,GAAG,0BAA0B,CAAC,MAAM,CAAC;IACxD,OAAO;AACL,QAAA,GAAG,EAAE,aAAa;AAClB,QAAA,SAAS,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE;AACJ,YAAA,KAAK,EAAE,qBAAqB,CAAC,MAAM,CAAC;AACpC,YAAA,EAAE,EAAE,2BAA2B,CAAC,MAAM,CAAC;AACvC,YAAA,SAAS,EAAE,IAAI;AAChB,SAAA;AACD,QAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;QAC7C,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;QACrD,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;QACnD,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;QAC7C,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;KAChD;AACH;AAEO,eAAe,6BAA6B,CACjD,OAAe,EACf,IAAuB,EACvB,MAA0C,EAAA;AAE1C,IAAA,MAAM,WAAW,GAAG,oCAAoC,CAAC,MAAM,CAAC;IAChE,MAAM,UAAU,GAAG,MAAMC,wCAAmB,CAAC,OAAO,EAAE,WAAW,CAAC;AAClE,IAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACrB,QAAA,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C;AAEA,IAAA,IACE,IAAI,CAAC,MAAM,GAAG,CAAC;QACf,MAAM,CAAC,sBAAsB,KAAK,IAAI;AACtC,QAAA,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,EAC1C;AACA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvE,QAAA,IAAI,SAAS,KAAK,SAAS,EAAE;AAC3B,YAAA,MAAM,IAAI,KAAK,CACb,oEAAoE,SAAS,CAAA,6BAAA,CAA+B,CAC7G;QACH;IACF;AACF;AAEO,eAAe,qBAAqB,CACzC,OAAe,EACf,MAA0C,EAC1C,IAAA,GAA0B,EAAE,EAAA;IAE5B,MAAM,6BAA6B,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC;AAC1D,IAAA,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC;AAC3C,IAAA,MAAM,YAAY,GAChB,IAAI,CAAC,MAAM,GAAG;UACV,GAAG,GAAG,CAAC,KAAK,CAAA,KAAA,EAAQ,KAAK,CAAC,OAAO,CAAC,CAAA,IAAA,EAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;UAClE,CAAA,EAAG,GAAG,CAAC,KAAK,CAAA,KAAA,EAAQ,KAAK,CAAC,OAAO,CAAC,CAAA,CAAE;AAC1C,IAAA,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CACnC,oBAAoB,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,CAAC,EACjD;QACE,GAAG,EAAE,GAAG,CAAC,aAAa;QACtB,GAAG,EAAE,GAAG,CAAC,GAAG;AACZ,QAAA,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;AACvC,KAAA,CACF;IACD,OAAO;QACL,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC;QACzD,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC;QACzD,QAAQ,EAAE,MAAM,CAAC,QAAQ;AACzB,QAAA,QAAQ,EAAE,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC;KAClD;AACH;AAEA,SAAS,cAAc,CACrB,IAAY,EACZ,OAAe,EACf,IAAY,EACZ,IAAA,GAAiB,EAAE,EACnB,KAAK,GAAG,MAAM,EAAA;AAEd,IAAA,MAAM,OAAO,GAAG,CAAC,IAAY,KAAaJ,UAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;AAClE,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACzC,QAAQ,IAAI;AACZ,QAAA,KAAK,IAAI;AACT,QAAA,KAAK,QAAQ;YACX,OAAO;AACL,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,CAAA,QAAA,EAAW,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE;aAC3D;AACH,QAAA,KAAK,IAAI;AACT,QAAA,KAAK,YAAY;YACf,OAAO;AACL,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,CAAA,KAAA,EAAQ,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE;aACxD;AACH,QAAA,KAAK,IAAI;AACT,QAAA,KAAK,YAAY;YACf,OAAO;AACL,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,CAAA,qBAAA,EAAwB,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE;aACxE;AACH,QAAA,KAAK,KAAK;YACR,OAAO;AACL,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,CAAA,IAAA,EAAO,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE;aACxD;AACH,QAAA,KAAK,IAAI;YACP,OAAO;AACL,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,CAAA,OAAA,EAAU,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE;aAC1D;AACH,QAAA,KAAK,IAAI;YACP,OAAO;AACL,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,KAAA,EAAQ,KAAK,CAC5B,CAAA,MAAA,EAAS,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA,IAAA,EAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAChH,CAAA,CAAE;aACJ;AACH,QAAA,KAAK,GAAG;YACN,OAAO;AACL,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,KAAA,EAAQ,KAAK,CAC5B,CAAA,GAAA,EAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA,IAAA,EAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAC1G,CAAA,CAAE;aACJ;AACH,QAAA,KAAK,KAAK;YACR,OAAO;AACL,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,KAAA,EAAQ,KAAK,CAC5B,CAAA,IAAA,EAAO,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA,IAAA,EAAO,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CACjH,CAAA,CAAE;aACJ;AACH,QAAA,KAAK,MAAM;YACT,OAAO;AACL,gBAAA,QAAQ,EAAE,WAAW;AACrB,gBAAA,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,GAAG,KAAK,CAAA,KAAA,EAAQ,KAAK,CAC5B,CAAA,MAAA,EAAS,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAA,aAAA,EAAgB,KAAK,CAAC,OAAO,CAAC,CAAA,MAAA,EAAS,OAAO,CAAA,CAAE,CACrF,CAAA,CAAE;aACJ;AACH,QAAA,KAAK,GAAG;YACN,OAAO;AACL,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,CAAA,QAAA,EAAW,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE;aAC1D;AACH,QAAA,KAAK,GAAG;YACN,OAAO;AACL,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,KAAA,EAAQ,KAAK,CAC5B,CAAA,IAAA,EAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA,IAAA,EAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAC5G,CAAA,CAAE;aACJ;AACH,QAAA,KAAK,KAAK;YACR,OAAO;AACL,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,KAAA,EAAQ,KAAK,CAC5B,CAAA,SAAA,EAAY,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA,IAAA,EAAO,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CACtH,CAAA,CAAE;aACJ;AACH,QAAA,KAAK,MAAM;AACX,QAAA,KAAK,IAAI;YACP,OAAO;AACL,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,KAAA,EAAQ,KAAK,CAAC,IAAI,CAAC,CAAA,IAAA,EAAO,OAAO,CAAA,CAAE;aACrD;AACH,QAAA;AACE,YAAA,MAAM,IAAI,KAAK,CAAC,2CAA2C,IAAI,CAAA,CAAE,CAAC;;AAEtE;AAEO,eAAe,qBAAqB,CACzC,KAAsD,EACtD,MAA0C,EAAA;AAE1C,IAAA,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE;AAChD,QAAA,OAAO,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;IACpE;AACA,IAAA,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC;IAC3C,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE;AACzC,IAAA,MAAM,OAAO,GAAGA,UAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,EAAE,CAAC;IAC5D,MAAM,OAAO,GAAG,cAAc,CAC5B,KAAK,CAAC,IAAI,EACV,OAAO,EACP,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,IAAI,EACV,GAAG,CAAC,KAAK,CACV;AACD,IAAA,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACrD,IAAA,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE;QAC1B,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,CACzBA,UAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,EACpC,OAAO,CAAC,MAAM,EACd;AACE,YAAA,QAAQ,EAAE,MAAM;AACjB,SAAA,CACF;IACH;AACA,IAAA,IAAI;AACF,QAAA,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CACnC,oBAAoB,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,EACpD;YACE,GAAG,EAAE,GAAG,CAAC,aAAa;YACtB,GAAG,EAAE,GAAG,CAAC,GAAG;AACZ,YAAA,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;AACvC,SAAA,CACF;QACD,OAAO;YACL,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC;YACzD,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC;YACzD,QAAQ,EAAE,MAAM,CAAC,QAAQ;AACzB,YAAA,QAAQ,EAAE,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC;SAClD;IACH;YAAU;QACR,MAAM,GAAG,CAAC;AACP,aAAA,IAAI,CAAC,CAAA,OAAA,EAAU,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE;YAChC,GAAG,EAAE,GAAG,CAAC,aAAa;YACtB,GAAG,EAAE,GAAG,CAAC,GAAG;AACZ,YAAA,OAAO,EAAE,KAAK;SACf;AACA,aAAA,KAAK,CAAC,MAAM,SAAS,CAAC;IAC3B;AACF;AAEM,SAAU,sBAAsB,CACpC,MAAmB,EACnB,GAAW,EAAA;IAEX,IAAI,SAAS,GAAG,EAAE;AAClB,IAAA,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE;AACxB,QAAA,SAAS,IAAI,CAAA,SAAA,EAAY,MAAM,CAAC,MAAM,IAAI;IAC5C;SAAO;QACL,SAAS,IAAI,4DAA4D;IAC3E;AACA,IAAA,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE;AACxB,QAAA,SAAS,IAAI,CAAA,SAAA,EAAY,MAAM,CAAC,MAAM,IAAI;IAC5C;AACA,IAAA,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE;AACpD,QAAA,SAAS,IAAI,CAAA,WAAA,EAAc,MAAM,CAAC,QAAQ,IAAI;IAChD;AACA,IAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;QACnB,SAAS,IAAI,mBAAmB;IAClC;AACA,IAAA,SAAS,IAAI,CAAA,mBAAA,EAAsB,GAAG,CAAA,CAAE;AACxC,IAAA,OAAO,SAAS,CAAC,IAAI,EAAE;AACzB;;;;;;;;;;;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var manager = require('@langchain/core/callbacks/manager');
|
|
4
|
+
|
|
5
|
+
function appendCallbacks(callbacks, additions) {
|
|
6
|
+
if (additions.length === 0) {
|
|
7
|
+
return callbacks ?? [];
|
|
8
|
+
}
|
|
9
|
+
if (callbacks == null) {
|
|
10
|
+
return [...additions];
|
|
11
|
+
}
|
|
12
|
+
if (Array.isArray(callbacks)) {
|
|
13
|
+
return callbacks.concat(additions);
|
|
14
|
+
}
|
|
15
|
+
return callbacks.copy(additions.map(manager.ensureHandler));
|
|
16
|
+
}
|
|
17
|
+
function findCallback(callbacks, predicate) {
|
|
18
|
+
if (callbacks == null) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
const handlers = Array.isArray(callbacks) ? callbacks : callbacks.handlers;
|
|
22
|
+
return handlers.find(predicate);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
exports.appendCallbacks = appendCallbacks;
|
|
26
|
+
exports.findCallback = findCallback;
|
|
27
|
+
//# sourceMappingURL=callbacks.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callbacks.cjs","sources":["../../../src/utils/callbacks.ts"],"sourcesContent":["import { ensureHandler } from '@langchain/core/callbacks/manager';\nimport type {\n BaseCallbackHandler,\n CallbackHandlerMethods,\n} from '@langchain/core/callbacks/base';\nimport type { Callbacks } from '@langchain/core/callbacks/manager';\n\nexport type CallbackEntry = BaseCallbackHandler | CallbackHandlerMethods;\n\nexport function appendCallbacks(\n callbacks: Callbacks | undefined,\n additions: readonly CallbackEntry[]\n): Callbacks {\n if (additions.length === 0) {\n return callbacks ?? [];\n }\n\n if (callbacks == null) {\n return [...additions];\n }\n\n if (Array.isArray(callbacks)) {\n return callbacks.concat(additions);\n }\n\n return callbacks.copy(additions.map(ensureHandler));\n}\n\nexport function findCallback(\n callbacks: Callbacks | undefined,\n predicate: (callback: CallbackEntry) => boolean\n): CallbackEntry | undefined {\n if (callbacks == null) {\n return undefined;\n }\n\n const handlers = Array.isArray(callbacks) ? callbacks : callbacks.handlers;\n return handlers.find(predicate);\n}\n"],"names":["ensureHandler"],"mappings":";;;;AASM,SAAU,eAAe,CAC7B,SAAgC,EAChC,SAAmC,EAAA;AAEnC,IAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;QAC1B,OAAO,SAAS,IAAI,EAAE;IACxB;AAEA,IAAA,IAAI,SAAS,IAAI,IAAI,EAAE;AACrB,QAAA,OAAO,CAAC,GAAG,SAAS,CAAC;IACvB;AAEA,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC5B,QAAA,OAAO,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;IACpC;IAEA,OAAO,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAACA,qBAAa,CAAC,CAAC;AACrD;AAEM,SAAU,YAAY,CAC1B,SAAgC,EAChC,SAA+C,EAAA;AAE/C,IAAA,IAAI,SAAS,IAAI,IAAI,EAAE;AACrB,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,SAAS,CAAC,QAAQ;AAC1E,IAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AACjC;;;;;"}
|
|
@@ -26,6 +26,7 @@ import { emitAgentLog, safeDispatchCustomEvent } from '../utils/events.mjs';
|
|
|
26
26
|
import { attemptInvoke, tryFallbackProviders } from '../llm/invoke.mjs';
|
|
27
27
|
import { shouldTriggerSummarization } from '../summarization/index.mjs';
|
|
28
28
|
import { createSummarizeNode } from '../summarization/node.mjs';
|
|
29
|
+
import { appendCallbacks } from '../utils/callbacks.mjs';
|
|
29
30
|
import { createSchemaOnlyTools } from '../tools/schema.mjs';
|
|
30
31
|
import { AgentContext } from '../agents/AgentContext.mjs';
|
|
31
32
|
import { createFakeStreamingLLM } from '../llm/fake.mjs';
|
|
@@ -50,7 +51,7 @@ import 'stream';
|
|
|
50
51
|
import { createCloudflareCodingToolBundle } from '../tools/cloudflare/CloudflareSandboxTools.mjs';
|
|
51
52
|
import { isThinkingEnabled } from '../llm/request.mjs';
|
|
52
53
|
import { initializeModel } from '../llm/init.mjs';
|
|
53
|
-
import { createLangfuseHandler, disposeLangfuseHandler } from '../langfuse.mjs';
|
|
54
|
+
import { createLangfuseHandler, createLangfuseTraceMetadata, disposeLangfuseHandler } from '../langfuse.mjs';
|
|
54
55
|
import { partitionAndMarkOpenRouterToolCache } from '../llm/openrouter/toolCache.mjs';
|
|
55
56
|
|
|
56
57
|
/* eslint-disable no-console */
|
|
@@ -976,17 +977,18 @@ class StandardGraph extends Graph {
|
|
|
976
977
|
langfuse: agentContext.langfuse,
|
|
977
978
|
userId: config.configurable?.user_id,
|
|
978
979
|
sessionId: config.configurable?.thread_id,
|
|
979
|
-
traceMetadata: {
|
|
980
|
+
traceMetadata: createLangfuseTraceMetadata({
|
|
980
981
|
messageId: this.runId,
|
|
981
982
|
parentMessageId: config.configurable?.requestBody?.parentMessageId,
|
|
982
983
|
agentId,
|
|
983
984
|
agentName: agentContext.name,
|
|
984
|
-
},
|
|
985
|
+
}),
|
|
986
|
+
tags: ['librechat', 'agent'],
|
|
985
987
|
});
|
|
986
988
|
const invokeConfig = langfuseHandler
|
|
987
989
|
? {
|
|
988
990
|
...config,
|
|
989
|
-
callbacks: (config.callbacks
|
|
991
|
+
callbacks: appendCallbacks(config.callbacks, [langfuseHandler]),
|
|
990
992
|
}
|
|
991
993
|
: config;
|
|
992
994
|
try {
|