UNPKG

@tanstack/ai-sandbox

Version:

Provider-agnostic sandbox layer for TanStack AI — run harness adapters inside isolated sandboxes (defineSandbox, defineWorkspace, withSandbox) with a uniform SandboxHandle, workspace bootstrap, policy, and resumable lifecycle.

168 lines (155 loc) 4.56 kB
import type { ModelMessage, RunRecord, RunStatus, RunStore, PersistedArtifactRef, TokenUsage, } from '@tanstack/ai' export interface MemoryMessageStore { loadThread: (threadId: string) => Promise<Array<ModelMessage>> saveThread: (threadId: string, messages: Array<ModelMessage>) => Promise<void> } export type MemoryRunRecord = RunRecord export type MemoryRunStore = RunStore export interface MemoryGenerationRunRecord { runId: string threadId: string activity: string provider: string model: string status: RunStatus startedAt: number finishedAt?: number error?: { message: string; code?: string } result?: unknown artifacts?: Array<PersistedArtifactRef> usage?: TokenUsage } export interface MemoryGenerationRunStore { createOrResume: ( input: Pick< MemoryGenerationRunRecord, 'runId' | 'threadId' | 'activity' | 'provider' | 'model' | 'startedAt' > & { status?: RunStatus }, ) => Promise<MemoryGenerationRunRecord> update: ( runId: string, patch: Partial< Pick< MemoryGenerationRunRecord, 'status' | 'finishedAt' | 'error' | 'result' | 'artifacts' | 'usage' > >, ) => Promise<void> get: (runId: string) => Promise<MemoryGenerationRunRecord | null> findLatestForThread: ( threadId: string, ) => Promise<MemoryGenerationRunRecord | null> } export interface MemoryInterruptRecord { interruptId: string runId: string threadId: string status: 'pending' | 'resolved' | 'cancelled' requestedAt: number resolvedAt?: number payload: Record<string, unknown> response?: unknown } export interface MemoryInterruptStore { create: ( record: Omit<MemoryInterruptRecord, 'status' | 'resolvedAt'>, ) => Promise<void> resolve: (interruptId: string, response?: unknown) => Promise<void> cancel: (interruptId: string) => Promise<void> get: (interruptId: string) => Promise<MemoryInterruptRecord | null> list: (threadId: string) => Promise<Array<MemoryInterruptRecord>> listPending: (threadId: string) => Promise<Array<MemoryInterruptRecord>> listByRun: (runId: string) => Promise<Array<MemoryInterruptRecord>> listPendingByRun: (runId: string) => Promise<Array<MemoryInterruptRecord>> } export interface MemoryMetadataStore { get: (namespace: string, key: string) => Promise<unknown | null> set: (namespace: string, key: string, value: unknown) => Promise<void> delete: (namespace: string, key: string) => Promise<void> } export interface MemoryArtifactRecord { artifactId: string runId: string threadId: string blobKey?: string name: string mimeType: string size: number sourceUrl?: string createdAt: number } export interface MemoryArtifactStore { save: (record: MemoryArtifactRecord) => Promise<void> get: (artifactId: string) => Promise<MemoryArtifactRecord | null> list: (runId: string) => Promise<Array<MemoryArtifactRecord>> listForThread: (threadId: string) => Promise<Array<MemoryArtifactRecord>> delete: (artifactId: string) => Promise<void> deleteForRun: (runId: string) => Promise<void> } export type MemoryBlobBody = | ReadableStream<Uint8Array> | ArrayBuffer | ArrayBufferView | string | Blob export interface MemoryBlobRecord { key: string size?: number etag?: string contentType?: string customMetadata?: Record<string, string> createdAt?: number updatedAt?: number } export interface MemoryBlobStore { put: ( key: string, body: MemoryBlobBody, options?: { contentType?: string customMetadata?: Record<string, string> expectedLength?: number }, ) => Promise<MemoryBlobRecord> get: ( key: string, options?: { range?: { offset: number; length?: number } }, ) => Promise< | (MemoryBlobRecord & { arrayBuffer: () => Promise<ArrayBuffer> text: () => Promise<string> body?: ReadableStream<Uint8Array> range?: { offset: number; length: number } }) | null > head: (key: string) => Promise<MemoryBlobRecord | null> delete: (key: string) => Promise<void> list: (options?: { prefix?: string cursor?: string limit?: number }) => Promise<{ objects: Array<MemoryBlobRecord> cursor?: string truncated?: boolean }> } export interface MemorySnapshotPersistence { stores: { messages: MemoryMessageStore runs: MemoryRunStore generationRuns: MemoryGenerationRunStore interrupts: MemoryInterruptStore metadata: MemoryMetadataStore artifacts: MemoryArtifactStore blobs: MemoryBlobStore } }