UNPKG

eve

Version:

Filesystem-first framework for durable backend AI agents that run anywhere.

1 lines • 2.97 kB
import{materializeSandboxDockerfile}from"#execution/sandbox/dockerfile.js";import{createSandboxProviderIdentity}from"#execution/sandbox/provider-identity.js";import{isSandboxPreparedArtifactRecord,sandboxProviderResourceIdentity}from"#shared/sandbox-provider.js";import{createStableHash}from"#execution/sandbox/bindings/microsandbox-runtime.js";import{pruneMicrosandboxTemplates}from"#execution/sandbox/bindings/microsandbox-templates.js";import{microsandboxOptionsForHash,resolveMicrosandboxOptions}from"#execution/sandbox/bindings/microsandbox-options.js";import{enrichMicrosandboxError}from"#execution/sandbox/bindings/microsandbox-create.js";import{createMicrosandboxHandle,prewarmMicrosandboxTemplate}from"#execution/sandbox/bindings/microsandbox-lifecycle.js";const MICROSANDBOX_PROVIDER_NAME=`microsandbox`;function createMicrosandboxSandboxProvider(e=void 0){let t=e??{},n=resolveMicrosandboxOptions(t),r=createStableHash(JSON.stringify(microsandboxOptionsForHash(n))).slice(0,20);return{async prepare(e){let i=await materializeSandboxDockerfile({files:e.files,storagePath:e.storagePath}),a=createSandboxProviderIdentity({dockerfile:i?.contentHash,optionsHash:r,resources:sandboxProviderResourceIdentity(e.resources),sourceRevision:e.sourceRevision,version:2}).slice(0,24);try{return await prewarmMicrosandboxTemplate({context:e,dockerfile:i,options:n,optionsHash:r,prepare:t.prepare,providerName:MICROSANDBOX_PROVIDER_NAME,templateKey:a})}catch(e){throw enrichMicrosandboxError({context:`Failed to prepare microsandbox`,error:e})}},async resume(e,t,i){let a=requireArtifact(t),o=requireState(i);if(o.optionsHash!==r||a.optionsHash!==r||o.sessionIdentity!==microsandboxSessionIdentity(e.session.id,a,r))throw Error(`microsandbox session state is incompatible with this environment.`);return(await createMicrosandboxHandle({artifact:a,context:e,createIfMissing:!1,sessionIdentity:o.sessionIdentity,options:n,optionsHash:r,providerName:MICROSANDBOX_PROVIDER_NAME})).handle},async start(e,t,i){let a=requireArtifact(i);return await createMicrosandboxHandle({artifact:a,context:e,options:n,optionsHash:r,providerName:MICROSANDBOX_PROVIDER_NAME,runtimeOptions:t})}}}function microsandboxSessionIdentity(e,t,n){return createStableHash(`${e}:${t.snapshotName}:${n}`).slice(0,32)}function requireArtifact(e){if(!isSandboxPreparedArtifactRecord(e)||e.version!==2||typeof e.optionsHash!=`string`||typeof e.snapshotName!=`string`)throw Error(`Invalid prepared microsandbox artifact.`);return{image:typeof e.image==`string`?e.image:null,optionsHash:e.optionsHash,snapshotName:e.snapshotName,version:2}}function requireState(e){if(!isSandboxPreparedArtifactRecord(e)||e.version!==3||typeof e.optionsHash!=`string`||typeof e.sessionIdentity!=`string`)throw Error(`Invalid microsandbox session state.`);return{optionsHash:e.optionsHash,sessionIdentity:e.sessionIdentity,version:3}}export{MICROSANDBOX_PROVIDER_NAME,createMicrosandboxSandboxProvider,pruneMicrosandboxTemplates};