niceeval 0.13.2 → 0.13.3-canary.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/dist/agents/claude-code-native.cjs +213 -0
  2. package/dist/agents/claude-code-native.cjs.map +1 -0
  3. package/dist/agents/claude-code-native.d.cts +5 -0
  4. package/dist/agents/claude-code-native.d.mts +5 -0
  5. package/dist/agents/claude-code-native.d.ts +5 -0
  6. package/dist/agents/claude-code-native.js +6 -0
  7. package/dist/agents/claude-code-native.js.map +1 -0
  8. package/dist/agents/claude-code.cjs +26 -80
  9. package/dist/agents/claude-code.cjs.map +1 -1
  10. package/dist/agents/codex-app-server.cjs +315 -0
  11. package/dist/agents/codex-app-server.cjs.map +1 -0
  12. package/dist/agents/codex-app-server.d.cts +9 -0
  13. package/dist/agents/codex-app-server.d.mts +9 -0
  14. package/dist/agents/codex-app-server.d.ts +9 -0
  15. package/dist/agents/codex-app-server.js +6 -0
  16. package/dist/agents/codex-app-server.js.map +1 -0
  17. package/dist/agents/codex.cjs +16 -65
  18. package/dist/agents/codex.cjs.map +1 -1
  19. package/dist/agents/index.cjs +3 -1
  20. package/dist/agents/index.cjs.map +1 -1
  21. package/dist/agents/index.d.cts +1 -0
  22. package/dist/agents/index.d.mts +1 -0
  23. package/dist/agents/index.d.ts +1 -0
  24. package/dist/agents/index.js +84 -82
  25. package/dist/agents/index.mjs +84 -82
  26. package/dist/agents/managed-jsonl.cjs +207 -0
  27. package/dist/agents/managed-jsonl.cjs.map +1 -0
  28. package/dist/agents/managed-jsonl.d.cts +39 -0
  29. package/dist/agents/managed-jsonl.d.mts +39 -0
  30. package/dist/agents/managed-jsonl.d.ts +39 -0
  31. package/dist/agents/managed-jsonl.js +6 -0
  32. package/dist/agents/managed-jsonl.js.map +1 -0
  33. package/dist/agents/managed-process.cjs +31 -0
  34. package/dist/agents/managed-process.cjs.map +1 -0
  35. package/dist/agents/managed-process.d.cts +3 -0
  36. package/dist/agents/managed-process.d.mts +3 -0
  37. package/dist/agents/managed-process.d.ts +3 -0
  38. package/dist/agents/managed-process.js +6 -0
  39. package/dist/agents/managed-process.js.map +1 -0
  40. package/dist/agents/omp.cjs +18 -1
  41. package/dist/agents/omp.cjs.map +1 -1
  42. package/dist/agents/types.cjs.map +1 -1
  43. package/dist/agents/types.d.cts +8 -0
  44. package/dist/agents/types.d.mts +8 -0
  45. package/dist/agents/types.d.ts +8 -0
  46. package/dist/context/assert-first.cjs +1 -0
  47. package/dist/context/assert-first.cjs.map +1 -1
  48. package/dist/context/assert-first.d.cts +1 -0
  49. package/dist/context/assert-first.d.mts +1 -0
  50. package/dist/context/assert-first.d.ts +1 -0
  51. package/dist/context/attempt-resources.cjs +13 -0
  52. package/dist/context/attempt-resources.cjs.map +1 -0
  53. package/dist/context/attempt-resources.d.cts +3 -0
  54. package/dist/context/attempt-resources.d.mts +3 -0
  55. package/dist/context/attempt-resources.d.ts +3 -0
  56. package/dist/context/attempt-resources.js +8 -0
  57. package/dist/context/attempt-resources.js.map +1 -0
  58. package/dist/context/session.cjs +4 -3
  59. package/dist/context/session.cjs.map +1 -1
  60. package/dist/context/session.d.cts +1 -0
  61. package/dist/context/session.d.mts +1 -0
  62. package/dist/context/session.d.ts +1 -0
  63. package/dist/report/assets/styles.css +4 -0
  64. package/dist/report/components/attempt-detail/compute.cjs +4 -2
  65. package/dist/report/components/attempt-detail/compute.cjs.map +1 -1
  66. package/dist/report/components/attempt-detail/compute.d.cts +2 -2
  67. package/dist/report/components/attempt-detail/compute.d.mts +2 -2
  68. package/dist/report/components/attempt-detail/compute.d.ts +2 -2
  69. package/dist/report/components/attempt-detail/content.cjs +1 -0
  70. package/dist/report/components/attempt-detail/content.cjs.map +1 -1
  71. package/dist/report/components/attempt-detail/validate.cjs +3 -2
  72. package/dist/report/components/attempt-detail/validate.cjs.map +1 -1
  73. package/dist/report/components/summaries/index.cjs +5 -1
  74. package/dist/report/components/summaries/index.cjs.map +1 -1
  75. package/dist/report/definition/primitives/conversation.cjs +7 -0
  76. package/dist/report/definition/primitives/conversation.cjs.map +1 -1
  77. package/dist/report/definition/primitives/conversation.d.cts +2 -0
  78. package/dist/report/definition/primitives/conversation.d.mts +2 -0
  79. package/dist/report/definition/primitives/conversation.d.ts +2 -0
  80. package/dist/report/definition/primitives/turn-trace.cjs +53 -3
  81. package/dist/report/definition/primitives/turn-trace.cjs.map +1 -1
  82. package/dist/report/react/styles.css +4 -0
  83. package/dist/runner/attempt-resources.cjs +60 -0
  84. package/dist/runner/attempt-resources.cjs.map +1 -0
  85. package/dist/runner/attempt-resources.d.cts +13 -0
  86. package/dist/runner/attempt-resources.d.mts +13 -0
  87. package/dist/runner/attempt-resources.d.ts +13 -0
  88. package/dist/runner/attempt-resources.js +6 -0
  89. package/dist/runner/attempt-resources.js.map +1 -0
  90. package/dist/runner/attempt.cjs +37 -3
  91. package/dist/runner/attempt.cjs.map +1 -1
  92. package/dist/sandbox/backend.cjs +32 -2
  93. package/dist/sandbox/backend.cjs.map +1 -1
  94. package/dist/sandbox/backend.d.cts +12 -1
  95. package/dist/sandbox/backend.d.mts +12 -1
  96. package/dist/sandbox/backend.d.ts +12 -1
  97. package/dist/sandbox/backend.js +28 -22
  98. package/dist/sandbox/docker.cjs +140 -0
  99. package/dist/sandbox/docker.cjs.map +1 -1
  100. package/dist/sandbox/docker.d.cts +3 -1
  101. package/dist/sandbox/docker.d.mts +3 -1
  102. package/dist/sandbox/docker.d.ts +3 -1
  103. package/dist/sandbox/e2b.cjs +42 -0
  104. package/dist/sandbox/e2b.cjs.map +1 -1
  105. package/dist/sandbox/e2b.d.cts +2 -0
  106. package/dist/sandbox/e2b.d.mts +2 -0
  107. package/dist/sandbox/e2b.d.ts +2 -0
  108. package/dist/sandbox/local.cjs +64 -0
  109. package/dist/sandbox/local.cjs.map +1 -1
  110. package/dist/sandbox/local.d.cts +3 -1
  111. package/dist/sandbox/local.d.mts +3 -1
  112. package/dist/sandbox/local.d.ts +3 -1
  113. package/dist/sandbox/managed-process.cjs +49 -0
  114. package/dist/sandbox/managed-process.cjs.map +1 -0
  115. package/dist/sandbox/managed-process.d.cts +11 -0
  116. package/dist/sandbox/managed-process.d.mts +11 -0
  117. package/dist/sandbox/managed-process.d.ts +11 -0
  118. package/dist/sandbox/managed-process.js +6 -0
  119. package/dist/sandbox/managed-process.js.map +1 -0
  120. package/dist/sandbox/types.cjs.map +1 -1
  121. package/dist/sandbox/types.d.cts +24 -0
  122. package/dist/sandbox/types.d.mts +24 -0
  123. package/dist/sandbox/types.d.ts +24 -0
  124. package/dist/sandbox/vercel.cjs +1 -0
  125. package/dist/sandbox/vercel.cjs.map +1 -1
  126. package/dist/sandbox/vercel.d.cts +1 -0
  127. package/dist/sandbox/vercel.d.mts +1 -0
  128. package/dist/sandbox/vercel.d.ts +1 -0
  129. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"vercel.js","sourceRoot":"","sources":["vercel.ts"],"names":[],"mappings":"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","sourcesContent":["// Vercel Sandbox provider:用 @vercel/sandbox SDK 把 Vercel microVM 当隔离工作区跑 eval。\n// 契约对齐 ../types.ts 的 Sandbox 接口,与 DockerSandbox 可互换。\nimport { Sandbox as VSandbox, APIError } from \"@vercel/sandbox\";\nimport { Effect } from \"effect\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport type { CommandResult, CommandOptions, SandboxReuseCapability, SuccessfulCommandResult, } from \"../types.ts\";\nimport { downloadDirectoryByList } from \"./download-directory.ts\";\nimport { collectLocalFiles, type CollectedLocalFile } from \"./local-files.ts\";\nimport { resolveLocalPath, resolveSandboxPath } from \"./paths.ts\";\nimport { shellQuote } from \"./shell.ts\";\nimport { commandLimit } from \"./deadline.ts\";\nimport { t } from \"../i18n/index.ts\";\nimport { reportActivity, reportDiagnostic } from \"../runner/feedback/sink.ts\";\nimport { classifyProvisionErrorFallback, type SandboxProvisionErrorKind } from \"./errors.ts\";\nimport { successfulCommandResult } from \"./operations.ts\";\nimport { supportedBackendCapability, unsupportedBackendCapability, type SandboxProviderBackend } from \"./backend.ts\";\n/**\n * vercel SDK 对单次 fetch 的 429 已有内部重试(见 @vercel/sandbox 的 with-retry.js,\n * 5 次指数退避);这里再分类是为了给 create() 整体重试兜底——耗尽内部重试后仍返回 429\n * 响应的 APIError,或 create() 轮询 session 状态过程里撞到的限流,都会走到这里。\n */\nexport function classifyProvisionError(e: unknown): SandboxProvisionErrorKind {\n if (e instanceof APIError && e.response.status === 429)\n return \"rate_limit\";\n // SDK 没有按元数据检索实例的通道:歧义类不重试、第一次抛出(见 retry.ts 的 reconcile 语义)。\n return classifyProvisionErrorFallback(e);\n}\n// Vercel Sandbox 的默认工作区路径(SDK writeFiles 默认落这里)。\nconst VERCEL_WORKDIR = \"/vercel/sandbox\";\n// rotate 时停掉旧 session 的等待上限:stop 挂起时不无限拖住当前命令。\nconst STOP_OLD_SESSION_TIMEOUT_MS = 15000;\n/** 给 promise 套超时;到点 fail。计时用 Effect Clock/Sleep,超时分支中断等待 fiber,不再手工管 timer。 */\nfunction withTimeout<T>(promise: Promise<T>, ms: number): Promise<T> {\n return Effect.runPromise(Effect.tryPromise({\n try: () => promise,\n catch: (cause) => cause,\n }).pipe(Effect.timeoutFail({\n duration: ms,\n onTimeout: () => new Error(`timed out after ${ms}ms`),\n })));\n}\nexport class VercelSandbox implements SandboxProviderBackend, SandboxReuseCapability {\n readonly workdir = VERCEL_WORKDIR;\n readonly otlpHost = null;\n private vsb: InstanceType<typeof VSandbox>;\n private commandTimeoutMs?: number;\n private deadlineAt?: number;\n private lifetimeMs?: number;\n private sessionCreatedAt: number;\n private runtime: string;\n /** factory `pathPrepend`;按声明顺序前置到受管 PATH,省略 = 空数组。 */\n private readonly pathPrepend: readonly string[];\n readonly sandboxId: string;\n readonly capabilities = {\n rootCommands: supportedBackendCapability(true as const),\n appendLog: unsupportedBackendCapability,\n suspend: supportedBackendCapability(() => this.suspend()),\n ensureLifetime: supportedBackendCapability((minRemainingMs: number) => this.ensureLifetime(minRemainingMs)),\n setCommandDeadline: supportedBackendCapability((deadlineAt?: number) => this.setCommandDeadline(deadlineAt)),\n };\n private constructor(vsb: InstanceType<typeof VSandbox>, id: string, commandTimeoutMs: number | undefined, runtime: string, pathPrepend: readonly string[] = [], lifetimeMs?: number, deadlineAt?: number) {\n this.vsb = vsb;\n this.sandboxId = id;\n this.commandTimeoutMs = commandTimeoutMs;\n this.deadlineAt = deadlineAt;\n this.sessionCreatedAt = Date.now();\n this.runtime = runtime;\n this.pathPrepend = pathPrepend;\n this.lifetimeMs = lifetimeMs;\n }\n /** 复用下由池在每次借出时换成承接者自己的 deadline(见 sandbox/deadline.ts)。 */\n setCommandDeadline(deadlineAt?: number): void {\n this.deadlineAt = deadlineAt;\n }\n static async create(opts: {\n timeout?: number;\n /** attempt deadline 的截止时刻(epoch ms);单条命令按剩余量取上限。 */\n deadlineAt?: number;\n runtime?: \"node20\" | \"node24\";\n snapshotId?: string;\n /** 实例 session 寿命;由当前 Vercel project plan 在 create 时真实校验。 */\n lifetimeMs?: number;\n feedback?: import(\"../types.ts\").ScopedFeedback;\n /**\n * 按序前置到受管 `PATH` 的目录;省略 = 不改 PATH(见 docs/feature/sandbox/library.md\n * 「PATH:受管变量与 pathPrepend」)。\n */\n pathPrepend?: readonly string[];\n } = {}): Promise<VercelSandbox> {\n // Vercel 支持 node22/node24/node26/python3.13;node20 回退到 node22。\n const runtime = opts.runtime === \"node20\" ? \"node22\" : (opts.runtime ?? \"node24\");\n // 单条命令没有 provider 级默认:上限恒从 attempt deadline 派生(见 deadline.ts)。\n const commandTimeoutMs = opts.timeout;\n // 凭据:优先从 env 显式传入(绕过 OIDC flow,非 TTY 环境也能用)。\n // 需要同时设 VERCEL_API_TOKEN + VERCEL_TEAM_ID + VERCEL_PROJECT_ID 三个。\n const token = process.env.VERCEL_API_TOKEN;\n const teamId = process.env.VERCEL_TEAM_ID;\n const projectId = process.env.VERCEL_PROJECT_ID ?? \"vercel-sandbox-default-project\";\n const credParams = token && teamId ? { token, teamId, projectId } : {};\n // 给了 snapshotId 就从快照起 microVM(预制模板:烘焙好 agent CLI 的快照)。\n const sourceParams = opts.snapshotId ? { source: { type: \"run\", snapshotId: opts.snapshotId } } : {};\n // 未声明 lifetimeMs 时交给 provider 选择默认值;声明后原值交给 provider 校验,绝不按\n // 本地假定的账号上限静默压短。\n const vsb = await VSandbox.create({\n runtime,\n ...(opts.lifetimeMs !== undefined ? { timeout: opts.lifetimeMs } : {}),\n ...sourceParams,\n ...credParams,\n } as Parameters<typeof VSandbox.create>[0]);\n // sandboxId = 沙箱的持久 name(留存唤醒的查找键),不是当前 session 的 sessionId——\n // session 在 rotate / stop-resume 之间会变,name 才是 `Sandbox.get({ name })` 能找回的\n // 稳定身份(SDK 与官方文档都按 name 索引,见 vercel.com/docs/sandbox/cli-reference)。\n const id = vsb.name;\n return new VercelSandbox(vsb, id, commandTimeoutMs, runtime, opts.pathPrepend ?? [], opts.lifetimeMs, opts.deadlineAt);\n }\n // 当前 session 的真实剩余寿命不足以覆盖即将执行的命令时,拍快照并请求一条新 session。\n // 是否允许该请求由当前 project plan 裁决,不维护一张会漂移的本地上限表。\n private async rotateIfNeeded(minRemainingMs: number | undefined): Promise<void> {\n if (minRemainingMs === undefined)\n return;\n const currentSession = this.vsb.currentSession();\n const remainingMs = currentSession.createdAt.getTime() + currentSession.timeout - Date.now();\n if (remainingMs >= minRemainingMs)\n return;\n const requestedLifetimeMs = this.lifetimeMs ?? Math.max(currentSession.timeout, minRemainingMs);\n const elapsed = Date.now() - this.sessionCreatedAt;\n const token = process.env.VERCEL_API_TOKEN;\n const teamId = process.env.VERCEL_TEAM_ID;\n const projectId = process.env.VERCEL_PROJECT_ID ?? \"vercel-sandbox-default-project\";\n const credParams = token && teamId ? { token, teamId, projectId } : {};\n try {\n const snap = await this.vsb.snapshot();\n const snapshotId = snap.snapshotId;\n const newVsb = await VSandbox.create({\n runtime: this.runtime,\n timeout: requestedLifetimeMs,\n source: { type: \"snapshot\", snapshotId },\n ...credParams,\n } as Parameters<typeof VSandbox.create>[0]);\n const oldVsb = this.vsb;\n this.vsb = newVsb;\n this.sessionCreatedAt = Date.now();\n // 旧 session 的 microVM 不随快照 / 新 session 创建自动回收,必须显式 stop,否则每次\n // rotate 都泄漏一台在计费的 microVM。stop 与新 session 无数据依赖,不 await ——\n // 挂起的 stop(最长 15s)不该拖住触发 rotate 的那条命令,还烧新 session 的时长。\n // 失败只警告不静默(旧的到 session timeout 也会被平台回收)。\n void withTimeout(oldVsb.stop(), STOP_OLD_SESSION_TIMEOUT_MS).catch((stopErr) => {\n reportDiagnostic({\n key: \"vercel-stop-rotated-session-failed\",\n severity: \"warning\",\n message: `[VercelSandbox] warning: failed to stop rotated-out session, microVM may leak until session timeout: ${String(stopErr)}`,\n data: { sandboxId: this.sandboxId, error: String(stopErr) },\n });\n });\n reportActivity(t(\"vercel.rotated\", {\n seconds: Math.round(elapsed / 1000),\n sessionId: newVsb.currentSession().sessionId,\n }).trimEnd());\n }\n catch (err) {\n reportDiagnostic({\n key: \"vercel-rotate-failed\",\n severity: \"warning\",\n message: t(\"vercel.rotateFailed\", {\n seconds: Math.round(elapsed / 1000),\n error: String(err),\n }).trimEnd(),\n data: { sandboxId: this.sandboxId, error: String(err) },\n });\n }\n }\n /**\n * 寿命确认:两次都读**当前 session 的远端元数据**(`createdAt + timeout`),不拿本地时钟记账,\n * 也不复读我们请求的续期值——vercel 的 plan 上限决定实际给多少,`extendTimeout` 在超出计划\n * 上限时直接抛 HTTP 400(本仓库真实跑分里恒抛,rotateIfNeeded 那条快照轮换路径就是为它写的)。\n * 请求值当答案会把「平台不给续」伪装成「续上了」,而症状要到实例中途消失才出现。\n */\n async ensureLifetime(minRemainingMs: number): Promise<{\n ready: true;\n expiresAt?: string;\n } | {\n ready: false;\n reason: string;\n }> {\n const remainingMs = (): number => {\n const session = this.vsb.currentSession();\n return session.createdAt.getTime() + session.timeout - Date.now();\n };\n try {\n const before = remainingMs();\n if (before >= minRemainingMs)\n return { ready: true, expiresAt: new Date(Date.now() + before).toISOString() };\n await this.vsb.extendTimeout(minRemainingMs - before);\n const after = remainingMs();\n return after >= minRemainingMs\n ? { ready: true, expiresAt: new Date(Date.now() + after).toISOString() }\n : {\n ready: false,\n reason: `vercel granted only ${Math.round(after / 1000)}s after extendTimeout; the next attempt needs ` +\n `${Math.round(minRemainingMs / 1000)}s (the plan's maximum execution timeout caps it)`,\n };\n }\n catch (e) {\n return {\n ready: false,\n reason: \"vercel refused to extend this sandbox's session (extendTimeout is rejected above the plan's maximum \" +\n `execution timeout): ${e instanceof Error ? e.message : String(e)}`,\n };\n }\n }\n async runCommand(cmd: string, args: readonly string[] = [], opts: CommandOptions = {}): Promise<CommandResult> {\n // pathPrepend 只能在 bash 里靠 `$PATH` 展开;直接 exec 的 cmd/args 不经 shell,\n // 因此路过 runShell 走同一条 bash -c 通道(与 docker `opts.stream` 的 tee 重路由同构)。\n if (this.pathPrepend.length > 0) {\n const joined = [cmd, ...args.map(shellQuote)].join(\" \");\n return this.runShell(joined, opts);\n }\n return this.execDirect(cmd, args, opts);\n }\n async runShell(script: string, opts: CommandOptions = {}): Promise<CommandResult> {\n // pathPrepend 是受管 PATH,在脚本自己的 shell 里对 `$PATH` 前置——env 走的是 SDK 的\n // env 参数(可能被 opts.env.PATH 覆盖),而这一行在它之后执行,始终生效\n // (见 docs/feature/sandbox/library.md「PATH:受管变量与 pathPrepend」)。\n const scriptWithPath = this.pathPrepend.length > 0\n ? `PATH=${shellQuote(this.pathPrepend.join(\":\"))}:\"$PATH\"\\n${script}`\n : script;\n return this.execDirect(\"bash\", [\"-c\", scriptWithPath], opts);\n }\n /** 实际发起 Vercel `runCommand` 调用的唯一出口;`runCommand`/`runShell` 都收敛到这里。 */\n private async execDirect(cmd: string, args: readonly string[], opts: CommandOptions): Promise<CommandResult> {\n // Vercel 命令级只认 `user: \"root\"`(映射 `sudo: true`);其它显式值报错,省略 = `sudo: false`\n // (见 docs/feature/sandbox/library.md「执行身份」)。\n if (opts.user !== undefined && opts.user !== \"root\") {\n throw new Error(t(\"vercel.userUnsupported\", { user: opts.user }));\n }\n const limit = commandLimit(opts, { commandTimeoutMs: this.commandTimeoutMs, deadlineAt: this.deadlineAt });\n // 只有 runner 交付的 attempt deadline 才是「当前物理实例必须承接多久」的请求。\n // 普通 provider 调用或显式的单命令 timeout 只是这条命令的执行上限,不能为此读取\n // currentSession()/轮换实例;前者在留存、文件传输等常规操作中甚至未必可用。\n await this.rotateIfNeeded(this.deadlineAt === undefined ? undefined : limit.timeoutMs);\n const finished = await this.vsb.runCommand({\n cmd,\n args: [...args],\n cwd: resolveSandboxPath(this.workdir, opts.cwd),\n env: opts.env,\n sudo: opts.user === \"root\",\n // per-command 上限从 attempt deadline 的剩余量派生(显式传 timeout 时按显式值);\n // 没有 deadline 就不设,provider 层不发明一条自己的线。\n ...(limit.timeoutMs !== undefined ? { timeoutMs: limit.timeoutMs } : {}),\n signal: opts.signal,\n });\n const stdout = await finished.stdout();\n const stderr = await finished.stderr();\n // Vercel SDK 的命令 API 只在结束后给完整输出;仍兑现 CommandOptions 回调的\n // 「至少一次」语义,让 adapter 不必按 provider 分叉。\n if (stdout)\n await opts.onStdout?.(stdout);\n if (stderr)\n await opts.onStderr?.(stderr);\n return {\n stdout,\n stderr,\n exitCode: finished.exitCode,\n };\n }\n async runCommandOrThrow(cmd: string, args: readonly string[] = [], opts: CommandOptions = {}): Promise<SuccessfulCommandResult> {\n return successfulCommandResult(await this.runCommand(cmd, args, opts), opts.sensitiveValues);\n }\n async runShellOrThrow(script: string, opts: CommandOptions = {}): Promise<SuccessfulCommandResult> {\n return successfulCommandResult(await this.runShell(script, opts), opts.sensitiveValues);\n }\n async readText(path: string): Promise<string> {\n const absPath = resolveSandboxPath(this.workdir, path);\n const buf = await this.vsb.readFileToBuffer({ path: absPath });\n if (!buf)\n throw new Error(t(\"vercel.fileNotFound\", { path: absPath }));\n return buf.toString(\"utf8\");\n }\n async pathExists(path: string): Promise<boolean> {\n const absPath = resolveSandboxPath(this.workdir, path);\n return this.vsb.fs.exists(absPath);\n }\n // targetDir 已由 paths.ts 的 normalizeSandboxPaths 解析成绝对路径;这里再解析一次\n // 只是对直接使用 provider 实例(未包 normalize)的幂等防御,提到 map 外只算一次。\n private async writeCollectedFiles(files: readonly CollectedLocalFile[], targetDir?: string): Promise<void> {\n const base = resolveSandboxPath(this.workdir, targetDir);\n const entries = files.map(({ path, content }) => ({\n path: resolveSandboxPath(base, path),\n content: Buffer.from(content),\n }));\n if (entries.length === 0)\n return;\n await this.vsb.writeFiles(entries);\n }\n async writeText(path: string, content: string): Promise<void> {\n await this.vsb.writeFiles([{ path: resolveSandboxPath(this.workdir, path), content }]);\n }\n async readBytes(path: string): Promise<Uint8Array> {\n const absPath = resolveSandboxPath(this.workdir, path);\n const buf = await this.vsb.readFileToBuffer({ path: absPath });\n if (!buf)\n throw new Error(t(\"vercel.fileNotFound\", { path: absPath }));\n return buf;\n }\n async writeBytes(path: string, content: Uint8Array): Promise<void> {\n await this.vsb.writeFiles([{\n path: resolveSandboxPath(this.workdir, path),\n content: Buffer.from(content),\n }]);\n }\n async uploadFile(source: string | URL, targetPath: string): Promise<void> {\n await this.writeBytes(targetPath, await readFile(resolveLocalPath(undefined, source)));\n }\n async uploadDirectory(sourceDir: string | URL, targetDir?: string, opts: {\n readonly ignore?: readonly string[];\n } = {}): Promise<void> {\n await this.writeCollectedFiles(await collectLocalFiles(resolveLocalPath(undefined, sourceDir), opts.ignore), targetDir);\n }\n /**\n * 递归下载沙箱内一个目录到本地磁盘,与 uploadDirectory 对称:两阶段模板(与 e2b provider\n * 共用)——find 列路径 + 逐文件 readFileToBuffer(独立 HTTP GET)读取,写回本地磁盘。\n */\n async downloadFile(sourcePath: string, target: string | URL): Promise<void> {\n const destination = resolveLocalPath(undefined, target);\n await mkdir(dirname(destination), { recursive: true });\n await writeFile(destination, await this.readBytes(sourcePath));\n }\n async downloadDirectory(sourceDir: string, targetDir: string | URL, opts: {\n readonly ignore?: readonly string[];\n } = {}): Promise<void> {\n const remoteDir = resolveSandboxPath(this.workdir, sourceDir);\n await downloadDirectoryByList({\n localDir: resolveLocalPath(undefined, targetDir),\n ignore: opts.ignore ?? [],\n runShell: (script) => this.runShell(script, { cwd: remoteDir }),\n readOne: (relPath) => this.readBytes(`${remoteDir}/${relPath}`),\n });\n }\n async stop(): Promise<void> {\n await this.vsb.stop();\n }\n /**\n * 留存休眠(suspend):vercel `stop`——sandbox 默认持久,stop 保存文件系统,之后经\n * `Sandbox.get` 恢复(SDK 原生能力);内存态不保留,唤醒后进程要重新启动。\n */\n async suspend(): Promise<void> {\n await this.vsb.stop();\n }\n}\n"]}
1
+ {"version":3,"file":"vercel.js","sourceRoot":"","sources":["vercel.ts"],"names":[],"mappings":"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","sourcesContent":["// Vercel Sandbox provider:用 @vercel/sandbox SDK 把 Vercel microVM 当隔离工作区跑 eval。\n// 契约对齐 ../types.ts 的 Sandbox 接口,与 DockerSandbox 可互换。\nimport { Sandbox as VSandbox, APIError } from \"@vercel/sandbox\";\nimport { Effect } from \"effect\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport type { CommandResult, CommandOptions, SandboxReuseCapability, SuccessfulCommandResult, } from \"../types.ts\";\nimport { downloadDirectoryByList } from \"./download-directory.ts\";\nimport { collectLocalFiles, type CollectedLocalFile } from \"./local-files.ts\";\nimport { resolveLocalPath, resolveSandboxPath } from \"./paths.ts\";\nimport { shellQuote } from \"./shell.ts\";\nimport { commandLimit } from \"./deadline.ts\";\nimport { t } from \"../i18n/index.ts\";\nimport { reportActivity, reportDiagnostic } from \"../runner/feedback/sink.ts\";\nimport { classifyProvisionErrorFallback, type SandboxProvisionErrorKind } from \"./errors.ts\";\nimport { successfulCommandResult } from \"./operations.ts\";\nimport { supportedBackendCapability, unsupportedBackendCapability, unsupportedBackendCapabilityBecause, type SandboxProviderBackend } from \"./backend.ts\";\n/**\n * vercel SDK 对单次 fetch 的 429 已有内部重试(见 @vercel/sandbox 的 with-retry.js,\n * 5 次指数退避);这里再分类是为了给 create() 整体重试兜底——耗尽内部重试后仍返回 429\n * 响应的 APIError,或 create() 轮询 session 状态过程里撞到的限流,都会走到这里。\n */\nexport function classifyProvisionError(e: unknown): SandboxProvisionErrorKind {\n if (e instanceof APIError && e.response.status === 429)\n return \"rate_limit\";\n // SDK 没有按元数据检索实例的通道:歧义类不重试、第一次抛出(见 retry.ts 的 reconcile 语义)。\n return classifyProvisionErrorFallback(e);\n}\n// Vercel Sandbox 的默认工作区路径(SDK writeFiles 默认落这里)。\nconst VERCEL_WORKDIR = \"/vercel/sandbox\";\n// rotate 时停掉旧 session 的等待上限:stop 挂起时不无限拖住当前命令。\nconst STOP_OLD_SESSION_TIMEOUT_MS = 15000;\n/** 给 promise 套超时;到点 fail。计时用 Effect Clock/Sleep,超时分支中断等待 fiber,不再手工管 timer。 */\nfunction withTimeout<T>(promise: Promise<T>, ms: number): Promise<T> {\n return Effect.runPromise(Effect.tryPromise({\n try: () => promise,\n catch: (cause) => cause,\n }).pipe(Effect.timeoutFail({\n duration: ms,\n onTimeout: () => new Error(`timed out after ${ms}ms`),\n })));\n}\nexport class VercelSandbox implements SandboxProviderBackend, SandboxReuseCapability {\n readonly workdir = VERCEL_WORKDIR;\n readonly otlpHost = null;\n private vsb: InstanceType<typeof VSandbox>;\n private commandTimeoutMs?: number;\n private deadlineAt?: number;\n private lifetimeMs?: number;\n private sessionCreatedAt: number;\n private runtime: string;\n /** factory `pathPrepend`;按声明顺序前置到受管 PATH,省略 = 空数组。 */\n private readonly pathPrepend: readonly string[];\n readonly sandboxId: string;\n readonly capabilities = {\n rootCommands: supportedBackendCapability(true as const),\n appendLog: unsupportedBackendCapability,\n suspend: supportedBackendCapability(() => this.suspend()),\n ensureLifetime: supportedBackendCapability((minRemainingMs: number) => this.ensureLifetime(minRemainingMs)),\n setCommandDeadline: supportedBackendCapability((deadlineAt?: number) => this.setCommandDeadline(deadlineAt)),\n managedProcess: unsupportedBackendCapabilityBecause(\"@vercel/sandbox 2.2.1 does not expose bidirectional stdin or raw output chunks\"),\n };\n private constructor(vsb: InstanceType<typeof VSandbox>, id: string, commandTimeoutMs: number | undefined, runtime: string, pathPrepend: readonly string[] = [], lifetimeMs?: number, deadlineAt?: number) {\n this.vsb = vsb;\n this.sandboxId = id;\n this.commandTimeoutMs = commandTimeoutMs;\n this.deadlineAt = deadlineAt;\n this.sessionCreatedAt = Date.now();\n this.runtime = runtime;\n this.pathPrepend = pathPrepend;\n this.lifetimeMs = lifetimeMs;\n }\n /** 复用下由池在每次借出时换成承接者自己的 deadline(见 sandbox/deadline.ts)。 */\n setCommandDeadline(deadlineAt?: number): void {\n this.deadlineAt = deadlineAt;\n }\n static async create(opts: {\n timeout?: number;\n /** attempt deadline 的截止时刻(epoch ms);单条命令按剩余量取上限。 */\n deadlineAt?: number;\n runtime?: \"node20\" | \"node24\";\n snapshotId?: string;\n /** 实例 session 寿命;由当前 Vercel project plan 在 create 时真实校验。 */\n lifetimeMs?: number;\n feedback?: import(\"../types.ts\").ScopedFeedback;\n /**\n * 按序前置到受管 `PATH` 的目录;省略 = 不改 PATH(见 docs/feature/sandbox/library.md\n * 「PATH:受管变量与 pathPrepend」)。\n */\n pathPrepend?: readonly string[];\n } = {}): Promise<VercelSandbox> {\n // Vercel 支持 node22/node24/node26/python3.13;node20 回退到 node22。\n const runtime = opts.runtime === \"node20\" ? \"node22\" : (opts.runtime ?? \"node24\");\n // 单条命令没有 provider 级默认:上限恒从 attempt deadline 派生(见 deadline.ts)。\n const commandTimeoutMs = opts.timeout;\n // 凭据:优先从 env 显式传入(绕过 OIDC flow,非 TTY 环境也能用)。\n // 需要同时设 VERCEL_API_TOKEN + VERCEL_TEAM_ID + VERCEL_PROJECT_ID 三个。\n const token = process.env.VERCEL_API_TOKEN;\n const teamId = process.env.VERCEL_TEAM_ID;\n const projectId = process.env.VERCEL_PROJECT_ID ?? \"vercel-sandbox-default-project\";\n const credParams = token && teamId ? { token, teamId, projectId } : {};\n // 给了 snapshotId 就从快照起 microVM(预制模板:烘焙好 agent CLI 的快照)。\n const sourceParams = opts.snapshotId ? { source: { type: \"run\", snapshotId: opts.snapshotId } } : {};\n // 未声明 lifetimeMs 时交给 provider 选择默认值;声明后原值交给 provider 校验,绝不按\n // 本地假定的账号上限静默压短。\n const vsb = await VSandbox.create({\n runtime,\n ...(opts.lifetimeMs !== undefined ? { timeout: opts.lifetimeMs } : {}),\n ...sourceParams,\n ...credParams,\n } as Parameters<typeof VSandbox.create>[0]);\n // sandboxId = 沙箱的持久 name(留存唤醒的查找键),不是当前 session 的 sessionId——\n // session 在 rotate / stop-resume 之间会变,name 才是 `Sandbox.get({ name })` 能找回的\n // 稳定身份(SDK 与官方文档都按 name 索引,见 vercel.com/docs/sandbox/cli-reference)。\n const id = vsb.name;\n return new VercelSandbox(vsb, id, commandTimeoutMs, runtime, opts.pathPrepend ?? [], opts.lifetimeMs, opts.deadlineAt);\n }\n // 当前 session 的真实剩余寿命不足以覆盖即将执行的命令时,拍快照并请求一条新 session。\n // 是否允许该请求由当前 project plan 裁决,不维护一张会漂移的本地上限表。\n private async rotateIfNeeded(minRemainingMs: number | undefined): Promise<void> {\n if (minRemainingMs === undefined)\n return;\n const currentSession = this.vsb.currentSession();\n const remainingMs = currentSession.createdAt.getTime() + currentSession.timeout - Date.now();\n if (remainingMs >= minRemainingMs)\n return;\n const requestedLifetimeMs = this.lifetimeMs ?? Math.max(currentSession.timeout, minRemainingMs);\n const elapsed = Date.now() - this.sessionCreatedAt;\n const token = process.env.VERCEL_API_TOKEN;\n const teamId = process.env.VERCEL_TEAM_ID;\n const projectId = process.env.VERCEL_PROJECT_ID ?? \"vercel-sandbox-default-project\";\n const credParams = token && teamId ? { token, teamId, projectId } : {};\n try {\n const snap = await this.vsb.snapshot();\n const snapshotId = snap.snapshotId;\n const newVsb = await VSandbox.create({\n runtime: this.runtime,\n timeout: requestedLifetimeMs,\n source: { type: \"snapshot\", snapshotId },\n ...credParams,\n } as Parameters<typeof VSandbox.create>[0]);\n const oldVsb = this.vsb;\n this.vsb = newVsb;\n this.sessionCreatedAt = Date.now();\n // 旧 session 的 microVM 不随快照 / 新 session 创建自动回收,必须显式 stop,否则每次\n // rotate 都泄漏一台在计费的 microVM。stop 与新 session 无数据依赖,不 await ——\n // 挂起的 stop(最长 15s)不该拖住触发 rotate 的那条命令,还烧新 session 的时长。\n // 失败只警告不静默(旧的到 session timeout 也会被平台回收)。\n void withTimeout(oldVsb.stop(), STOP_OLD_SESSION_TIMEOUT_MS).catch((stopErr) => {\n reportDiagnostic({\n key: \"vercel-stop-rotated-session-failed\",\n severity: \"warning\",\n message: `[VercelSandbox] warning: failed to stop rotated-out session, microVM may leak until session timeout: ${String(stopErr)}`,\n data: { sandboxId: this.sandboxId, error: String(stopErr) },\n });\n });\n reportActivity(t(\"vercel.rotated\", {\n seconds: Math.round(elapsed / 1000),\n sessionId: newVsb.currentSession().sessionId,\n }).trimEnd());\n }\n catch (err) {\n reportDiagnostic({\n key: \"vercel-rotate-failed\",\n severity: \"warning\",\n message: t(\"vercel.rotateFailed\", {\n seconds: Math.round(elapsed / 1000),\n error: String(err),\n }).trimEnd(),\n data: { sandboxId: this.sandboxId, error: String(err) },\n });\n }\n }\n /**\n * 寿命确认:两次都读**当前 session 的远端元数据**(`createdAt + timeout`),不拿本地时钟记账,\n * 也不复读我们请求的续期值——vercel 的 plan 上限决定实际给多少,`extendTimeout` 在超出计划\n * 上限时直接抛 HTTP 400(本仓库真实跑分里恒抛,rotateIfNeeded 那条快照轮换路径就是为它写的)。\n * 请求值当答案会把「平台不给续」伪装成「续上了」,而症状要到实例中途消失才出现。\n */\n async ensureLifetime(minRemainingMs: number): Promise<{\n ready: true;\n expiresAt?: string;\n } | {\n ready: false;\n reason: string;\n }> {\n const remainingMs = (): number => {\n const session = this.vsb.currentSession();\n return session.createdAt.getTime() + session.timeout - Date.now();\n };\n try {\n const before = remainingMs();\n if (before >= minRemainingMs)\n return { ready: true, expiresAt: new Date(Date.now() + before).toISOString() };\n await this.vsb.extendTimeout(minRemainingMs - before);\n const after = remainingMs();\n return after >= minRemainingMs\n ? { ready: true, expiresAt: new Date(Date.now() + after).toISOString() }\n : {\n ready: false,\n reason: `vercel granted only ${Math.round(after / 1000)}s after extendTimeout; the next attempt needs ` +\n `${Math.round(minRemainingMs / 1000)}s (the plan's maximum execution timeout caps it)`,\n };\n }\n catch (e) {\n return {\n ready: false,\n reason: \"vercel refused to extend this sandbox's session (extendTimeout is rejected above the plan's maximum \" +\n `execution timeout): ${e instanceof Error ? e.message : String(e)}`,\n };\n }\n }\n async runCommand(cmd: string, args: readonly string[] = [], opts: CommandOptions = {}): Promise<CommandResult> {\n // pathPrepend 只能在 bash 里靠 `$PATH` 展开;直接 exec 的 cmd/args 不经 shell,\n // 因此路过 runShell 走同一条 bash -c 通道(与 docker `opts.stream` 的 tee 重路由同构)。\n if (this.pathPrepend.length > 0) {\n const joined = [cmd, ...args.map(shellQuote)].join(\" \");\n return this.runShell(joined, opts);\n }\n return this.execDirect(cmd, args, opts);\n }\n async runShell(script: string, opts: CommandOptions = {}): Promise<CommandResult> {\n // pathPrepend 是受管 PATH,在脚本自己的 shell 里对 `$PATH` 前置——env 走的是 SDK 的\n // env 参数(可能被 opts.env.PATH 覆盖),而这一行在它之后执行,始终生效\n // (见 docs/feature/sandbox/library.md「PATH:受管变量与 pathPrepend」)。\n const scriptWithPath = this.pathPrepend.length > 0\n ? `PATH=${shellQuote(this.pathPrepend.join(\":\"))}:\"$PATH\"\\n${script}`\n : script;\n return this.execDirect(\"bash\", [\"-c\", scriptWithPath], opts);\n }\n /** 实际发起 Vercel `runCommand` 调用的唯一出口;`runCommand`/`runShell` 都收敛到这里。 */\n private async execDirect(cmd: string, args: readonly string[], opts: CommandOptions): Promise<CommandResult> {\n // Vercel 命令级只认 `user: \"root\"`(映射 `sudo: true`);其它显式值报错,省略 = `sudo: false`\n // (见 docs/feature/sandbox/library.md「执行身份」)。\n if (opts.user !== undefined && opts.user !== \"root\") {\n throw new Error(t(\"vercel.userUnsupported\", { user: opts.user }));\n }\n const limit = commandLimit(opts, { commandTimeoutMs: this.commandTimeoutMs, deadlineAt: this.deadlineAt });\n // 只有 runner 交付的 attempt deadline 才是「当前物理实例必须承接多久」的请求。\n // 普通 provider 调用或显式的单命令 timeout 只是这条命令的执行上限,不能为此读取\n // currentSession()/轮换实例;前者在留存、文件传输等常规操作中甚至未必可用。\n await this.rotateIfNeeded(this.deadlineAt === undefined ? undefined : limit.timeoutMs);\n const finished = await this.vsb.runCommand({\n cmd,\n args: [...args],\n cwd: resolveSandboxPath(this.workdir, opts.cwd),\n env: opts.env,\n sudo: opts.user === \"root\",\n // per-command 上限从 attempt deadline 的剩余量派生(显式传 timeout 时按显式值);\n // 没有 deadline 就不设,provider 层不发明一条自己的线。\n ...(limit.timeoutMs !== undefined ? { timeoutMs: limit.timeoutMs } : {}),\n signal: opts.signal,\n });\n const stdout = await finished.stdout();\n const stderr = await finished.stderr();\n // Vercel SDK 的命令 API 只在结束后给完整输出;仍兑现 CommandOptions 回调的\n // 「至少一次」语义,让 adapter 不必按 provider 分叉。\n if (stdout)\n await opts.onStdout?.(stdout);\n if (stderr)\n await opts.onStderr?.(stderr);\n return {\n stdout,\n stderr,\n exitCode: finished.exitCode,\n };\n }\n async runCommandOrThrow(cmd: string, args: readonly string[] = [], opts: CommandOptions = {}): Promise<SuccessfulCommandResult> {\n return successfulCommandResult(await this.runCommand(cmd, args, opts), opts.sensitiveValues);\n }\n async runShellOrThrow(script: string, opts: CommandOptions = {}): Promise<SuccessfulCommandResult> {\n return successfulCommandResult(await this.runShell(script, opts), opts.sensitiveValues);\n }\n async readText(path: string): Promise<string> {\n const absPath = resolveSandboxPath(this.workdir, path);\n const buf = await this.vsb.readFileToBuffer({ path: absPath });\n if (!buf)\n throw new Error(t(\"vercel.fileNotFound\", { path: absPath }));\n return buf.toString(\"utf8\");\n }\n async pathExists(path: string): Promise<boolean> {\n const absPath = resolveSandboxPath(this.workdir, path);\n return this.vsb.fs.exists(absPath);\n }\n // targetDir 已由 paths.ts 的 normalizeSandboxPaths 解析成绝对路径;这里再解析一次\n // 只是对直接使用 provider 实例(未包 normalize)的幂等防御,提到 map 外只算一次。\n private async writeCollectedFiles(files: readonly CollectedLocalFile[], targetDir?: string): Promise<void> {\n const base = resolveSandboxPath(this.workdir, targetDir);\n const entries = files.map(({ path, content }) => ({\n path: resolveSandboxPath(base, path),\n content: Buffer.from(content),\n }));\n if (entries.length === 0)\n return;\n await this.vsb.writeFiles(entries);\n }\n async writeText(path: string, content: string): Promise<void> {\n await this.vsb.writeFiles([{ path: resolveSandboxPath(this.workdir, path), content }]);\n }\n async readBytes(path: string): Promise<Uint8Array> {\n const absPath = resolveSandboxPath(this.workdir, path);\n const buf = await this.vsb.readFileToBuffer({ path: absPath });\n if (!buf)\n throw new Error(t(\"vercel.fileNotFound\", { path: absPath }));\n return buf;\n }\n async writeBytes(path: string, content: Uint8Array): Promise<void> {\n await this.vsb.writeFiles([{\n path: resolveSandboxPath(this.workdir, path),\n content: Buffer.from(content),\n }]);\n }\n async uploadFile(source: string | URL, targetPath: string): Promise<void> {\n await this.writeBytes(targetPath, await readFile(resolveLocalPath(undefined, source)));\n }\n async uploadDirectory(sourceDir: string | URL, targetDir?: string, opts: {\n readonly ignore?: readonly string[];\n } = {}): Promise<void> {\n await this.writeCollectedFiles(await collectLocalFiles(resolveLocalPath(undefined, sourceDir), opts.ignore), targetDir);\n }\n /**\n * 递归下载沙箱内一个目录到本地磁盘,与 uploadDirectory 对称:两阶段模板(与 e2b provider\n * 共用)——find 列路径 + 逐文件 readFileToBuffer(独立 HTTP GET)读取,写回本地磁盘。\n */\n async downloadFile(sourcePath: string, target: string | URL): Promise<void> {\n const destination = resolveLocalPath(undefined, target);\n await mkdir(dirname(destination), { recursive: true });\n await writeFile(destination, await this.readBytes(sourcePath));\n }\n async downloadDirectory(sourceDir: string, targetDir: string | URL, opts: {\n readonly ignore?: readonly string[];\n } = {}): Promise<void> {\n const remoteDir = resolveSandboxPath(this.workdir, sourceDir);\n await downloadDirectoryByList({\n localDir: resolveLocalPath(undefined, targetDir),\n ignore: opts.ignore ?? [],\n runShell: (script) => this.runShell(script, { cwd: remoteDir }),\n readOne: (relPath) => this.readBytes(`${remoteDir}/${relPath}`),\n });\n }\n async stop(): Promise<void> {\n await this.vsb.stop();\n }\n /**\n * 留存休眠(suspend):vercel `stop`——sandbox 默认持久,stop 保存文件系统,之后经\n * `Sandbox.get` 恢复(SDK 原生能力);内存态不保留,唤醒后进程要重新启动。\n */\n async suspend(): Promise<void> {\n await this.vsb.stop();\n }\n}\n"]}
@@ -31,6 +31,7 @@ export declare class VercelSandbox implements SandboxProviderBackend, SandboxReu
31
31
  reason: string;
32
32
  }>>;
33
33
  setCommandDeadline: import("./backend.cjs").SandboxBackendSupport<(deadlineAt?: number) => void>;
34
+ managedProcess: import("./backend.cjs").SandboxBackendSupport<never>;
34
35
  };
35
36
  private constructor();
36
37
  /** 复用下由池在每次借出时换成承接者自己的 deadline(见 sandbox/deadline.ts)。 */
@@ -31,6 +31,7 @@ export declare class VercelSandbox implements SandboxProviderBackend, SandboxReu
31
31
  reason: string;
32
32
  }>>;
33
33
  setCommandDeadline: import("./backend.mjs").SandboxBackendSupport<(deadlineAt?: number) => void>;
34
+ managedProcess: import("./backend.mjs").SandboxBackendSupport<never>;
34
35
  };
35
36
  private constructor();
36
37
  /** 复用下由池在每次借出时换成承接者自己的 deadline(见 sandbox/deadline.ts)。 */
@@ -31,6 +31,7 @@ export declare class VercelSandbox implements SandboxProviderBackend, SandboxReu
31
31
  reason: string;
32
32
  }>>;
33
33
  setCommandDeadline: import("./backend.js").SandboxBackendSupport<(deadlineAt?: number) => void>;
34
+ managedProcess: import("./backend.js").SandboxBackendSupport<never>;
34
35
  };
35
36
  private constructor();
36
37
  /** 复用下由池在每次借出时换成承接者自己的 deadline(见 sandbox/deadline.ts)。 */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "niceeval",
3
- "version": "0.13.2",
3
+ "version": "0.13.3-canary.37",
4
4
  "description": "Agent-native eval tool — eval agents, services, functions, and coding-agent fixtures",
5
5
  "type": "module",
6
6
  "license": "MIT",