@pumped-fn/agent-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["suspenseExtension"],"sources":["../src/index.ts"],"sourcesContent":["import { atom, flow, resource, tag, tags, typed, type Lite } from \"@pumped-fn/lite\"\nimport {\n extension as suspenseExtension,\n formatSuspenseStepKey,\n stepCounter,\n type SuspenseEventLog,\n type SuspenseExecEvent,\n type SuspenseStepCounter,\n type SuspenseStepEntry,\n type SuspenseStepKey,\n} from \"@pumped-fn/lite-extension-suspense\"\n\nexport type WorkerKind = \"code\" | \"llm\" | \"cli\" | string\nexport type MaterialKind = \"json\" | \"text\" | \"binary\" | \"reference\"\n\nexport type StepCounter = SuspenseStepCounter\nexport type WorkflowStepKey = SuspenseStepKey\nexport type WorkflowStepEntry = SuspenseStepEntry\nexport type WorkflowEventLog = SuspenseEventLog\nexport type WorkflowExecEvent = SuspenseExecEvent\nexport interface ExecEvent {\n readonly key?: WorkflowStepKey\n readonly target: Lite.ExecTarget\n readonly ctx: Lite.ExecutionContext\n readonly targetName: string\n readonly input: unknown\n}\nexport interface Step {\n workflow?: boolean\n remote?: boolean\n durable?: boolean\n kind?: WorkerKind\n timeoutMs?: number\n}\n\nexport { SuspendSignal, SuspenseSignal } from \"@pumped-fn/lite-extension-suspense\"\n\nexport interface RemoteRunner {\n run(event: ExecEvent, next: () => Promise<unknown>): Promise<unknown>\n}\n\nexport interface WorkflowExtensionOptions {\n log: WorkflowEventLog\n defaultTaskId?: string\n defaultRunId?: string\n}\n\nexport interface ExtensionOptions {\n remoteRunner?: RemoteRunner\n}\n\nexport const step = tag<Step>({ label: \"agent.step\", default: {} })\nexport const materialKind = tag<MaterialKind>({ label: \"agent.materialKind\" })\nexport const workers = tag<WorkerRegistry>({ label: \"agent.workerRegistry\" })\n\ntype WorkerFlow = Lite.AnyFlow\n\nexport class WorkerRegistry {\n private readonly flows = new Map<string, WorkerFlow>()\n\n register(flow: WorkerFlow, name = flow.name): this {\n if (!name) throw new Error(\"Worker flow must have a name\")\n this.flows.set(name, flow)\n return this\n }\n\n get(name: string): WorkerFlow {\n const found = this.flows.get(name)\n if (!found) throw new Error(`Worker \"${name}\" not registered`)\n return found\n }\n\n list(): string[] {\n return [...this.flows.keys()]\n }\n}\n\nexport function workerRegistry(flows: readonly WorkerFlow[] = []): WorkerRegistry {\n const registry = new WorkerRegistry()\n for (const workerFlow of flows) registry.register(workerFlow)\n return registry\n}\n\nexport function formatStepKey(key: WorkflowStepKey): string {\n return formatSuspenseStepKey(key)\n}\n\nexport interface WorkflowRunOptions {\n taskId: string\n runId: string\n}\n\nexport interface WorkflowContext {\n readonly taskId: string\n readonly runId: string\n}\n\nexport interface Runtime {\n readonly taskId: string\n readonly runId: string\n delegate<Output = unknown, Input = unknown>(name: string, input: Input): Promise<Output>\n}\n\nexport const workflowRun = tag<WorkflowRunOptions>({ label: \"workflow.run\" })\nexport const workflow = tag<WorkflowContext>({ label: \"workflow.runtime\" })\nexport const runtime = tag<Runtime>({ label: \"agent.runtime\" })\nexport const abortSignal = tag<AbortSignal>({ label: \"workflow.abortSignal\" })\n\nconst activeWorkflowEvent = tag<WorkflowExecEvent>({ label: \"workflow.event\" })\n\nasync function delegateWorker<Output = unknown, Input = unknown>(\n ctx: Lite.ExecutionContext,\n name: string,\n input: Input\n): Promise<Output> {\n const registry = registryOf(ctx)\n if (!registry) throw new Error(\"Worker registry not found\")\n const target = registry.get(name) as Lite.Flow<Output, Input>\n return ctx.exec({ flow: target, input } as Lite.ExecFlowOptions<Output, Input>)\n}\n\nexport function workflowExtension(options: WorkflowExtensionOptions): Lite.Extension {\n const base = createWorkflowExtension({\n name: \"workflow\",\n options,\n shouldHandle: shouldHandleWorkflowTarget,\n run: (event, next) => runTimer(event.target, event.ctx, next),\n })\n\n return {\n ...base,\n async wrapExec(next, target, ctx) {\n const wrapExec = base.wrapExec\n if (!wrapExec) return withRuntimeTag(ctx, workflow, workflowRuntimeOf(ctx, options), next)\n return withRuntimeTag(ctx, workflow, workflowRuntimeOf(ctx, options), () => wrapExec(next, target, ctx))\n },\n }\n}\n\nexport function extension(options: ExtensionOptions = {}): Lite.Extension {\n return {\n name: \"agent-sdk\",\n async wrapExec(next, target, ctx) {\n return withRuntimeTag(ctx, runtime, runtimeOf(ctx), async () => {\n if (stepOf(target, ctx).remote !== true) return next()\n if (!options.remoteRunner) throw new Error(\"Remote step requires remoteRunner\")\n return options.remoteRunner.run(execEvent(target, ctx), next)\n })\n },\n }\n}\n\nfunction createWorkflowExtension(options: {\n name: string\n options: WorkflowExtensionOptions\n shouldHandle(target: Lite.ExecTarget, ctx: Lite.ExecutionContext): boolean\n run(event: WorkflowExecEvent, next: () => Promise<unknown>): Promise<unknown>\n}): Lite.Extension {\n return suspenseExtension({\n name: options.name,\n log: options.options.log,\n defaultTaskId: options.options.defaultTaskId,\n defaultRunId: options.options.defaultRunId,\n getKey: (ctx) => nextWorkflowKey(ctx, options.options),\n shouldHandle: options.shouldHandle,\n shouldSuspend: (event) => {\n const config = stepOf(event.target, event.ctx)\n return config.durable === true && config.remote !== true\n },\n createPendingEntry: (event) => ({\n status: \"pending\",\n key: event.key,\n targetName: event.targetName,\n input: event.input,\n kind: \"durable\",\n }),\n run: (event, next) => {\n const previous = event.ctx.data.getTag(activeWorkflowEvent)\n event.ctx.data.setTag(activeWorkflowEvent, event)\n return options.run(event, next).finally(() => {\n if (previous) event.ctx.data.setTag(activeWorkflowEvent, previous)\n else event.ctx.data.deleteTag(activeWorkflowEvent)\n })\n },\n })\n}\n\nfunction registryOf(ctx: Lite.ExecutionContext): WorkerRegistry | undefined {\n return ctx.data.seekTag(workers)\n}\n\nfunction execEvent(target: Lite.ExecTarget, ctx: Lite.ExecutionContext): ExecEvent {\n const workflowEvent = ctx.data.seekTag(activeWorkflowEvent)\n return workflowEvent ?? {\n target,\n ctx,\n targetName: targetNameOf(target, ctx),\n input: ctx.input,\n }\n}\n\nfunction nextWorkflowKey(\n ctx: Lite.ExecutionContext,\n options: Pick<WorkflowExtensionOptions, \"defaultTaskId\" | \"defaultRunId\">\n): WorkflowStepKey {\n const config = ctx.data.seekTag(workflowRun)\n const foundTaskId = config?.taskId ?? options.defaultTaskId ?? \"default-task\"\n const foundRunId = config?.runId ?? options.defaultRunId ?? \"default-run\"\n let counter = ctx.data.seekTag(stepCounter)\n if (!counter) {\n counter = { next: 0 }\n rootContext(ctx).data.setTag(stepCounter, counter)\n }\n return { taskId: foundTaskId, runId: foundRunId, step: counter.next++ }\n}\n\nfunction workflowRuntimeOf(\n ctx: Lite.ExecutionContext,\n options: Pick<WorkflowExtensionOptions, \"defaultTaskId\" | \"defaultRunId\">\n): WorkflowContext {\n const config = ctx.data.seekTag(workflowRun)\n return {\n taskId: config?.taskId ?? options.defaultTaskId ?? \"default-task\",\n runId: config?.runId ?? options.defaultRunId ?? \"default-run\",\n }\n}\n\nfunction runtimeOf(ctx: Lite.ExecutionContext): Runtime {\n const config = ctx.data.seekTag(workflow)\n if (!config) throw new Error(\"agent extension requires workflow extension\")\n return {\n taskId: config.taskId,\n runId: config.runId,\n delegate: <Output = unknown, Input = unknown>(name: string, input: Input) =>\n delegateWorker<Output, Input>(ctx, name, input),\n }\n}\n\nfunction withRuntimeTag<T, R>(\n ctx: Lite.ExecutionContext,\n runtimeTag: Lite.Tag<T, boolean>,\n value: T,\n next: () => Promise<R>\n): Promise<R> {\n const hadPrevious = ctx.data.hasTag(runtimeTag)\n const previous = ctx.data.getTag(runtimeTag)\n ctx.data.setTag(runtimeTag, value)\n return next().finally(() => {\n if (hadPrevious) ctx.data.setTag(runtimeTag, previous as T)\n else ctx.data.deleteTag(runtimeTag)\n })\n}\n\nfunction shouldHandleWorkflowTarget(target: Lite.ExecTarget, ctx: Lite.ExecutionContext): boolean {\n const config = stepOf(target, ctx)\n return (\n config.workflow === true ||\n config.durable === true ||\n config.timeoutMs !== undefined\n )\n}\n\nfunction rootContext(ctx: Lite.ExecutionContext): Lite.ExecutionContext {\n let current = ctx\n while (current.parent) current = current.parent\n return current\n}\n\nfunction targetNameOf(target: Lite.ExecTarget, ctx: Lite.ExecutionContext): string {\n const name = ctx.name || target.name\n if (!name) throw new Error(\"Agent target must have a name\")\n return name\n}\n\nfunction runTimer(target: Lite.ExecTarget, ctx: Lite.ExecutionContext, next: () => Promise<unknown>): Promise<unknown> {\n const timeoutMs = stepOf(target, ctx).timeoutMs\n if (timeoutMs === undefined) return next()\n const controller = new AbortController()\n let timer: ReturnType<typeof setTimeout> | undefined\n return withRuntimeTag(ctx, abortSignal, controller.signal, () =>\n Promise.race([\n next(),\n new Promise<never>((_, reject) => {\n timer = setTimeout(() => {\n const error = new Error(`Workflow step timed out after ${timeoutMs}ms`)\n controller.abort(error)\n reject(error)\n }, timeoutMs)\n }),\n ])\n ).finally(() => {\n if (timer) clearTimeout(timer)\n })\n}\n\nfunction stepOf(target: Lite.ExecTarget, ctx: Lite.ExecutionContext): Step {\n const flowStep = typeof target === \"function\" ? {} : step.find(target)\n return { ...flowStep, ...(ctx.data.seekTag(step) ?? {}) }\n}\n\nexport type JsonPatchOperation =\n | { op: \"add\"; path: string; value: Lite.JsonValue }\n | { op: \"replace\"; path: string; value: Lite.JsonValue }\n | { op: \"remove\"; path: string }\n\nexport interface MaterialState<T> {\n name: string\n kind: MaterialKind\n revision: number\n state: T\n}\n\nexport interface MaterialOptions<T> {\n kind: MaterialKind\n initialState: T\n tags?: Lite.Tagged<any>[]\n keepAlive?: boolean\n}\n\nconst materialPatches = new WeakMap<object, WeakMap<object, Promise<void>>>()\n\nexport class MaterialConflictError extends Error {\n override readonly name = \"MaterialConflictError\"\n\n constructor(readonly expectedRevision: number, readonly currentRevision: number) {\n super(`Material revision conflict: expected ${expectedRevision}, current ${currentRevision}`)\n }\n}\n\nexport function material<T>(name: string, options: MaterialOptions<T>): Lite.Atom<MaterialState<T>> {\n return atom({\n keepAlive: options.keepAlive ?? true,\n tags: [materialKind(options.kind), ...(options.tags ?? [])],\n factory: () => ({\n name,\n kind: options.kind,\n revision: 0,\n state: clone(options.initialState),\n }),\n })\n}\n\nexport async function patchMaterial<T>(\n ctx: Lite.ExecutionContext,\n target: Lite.Atom<MaterialState<T>>,\n ops: JsonPatchOperation[],\n options: { expectedRevision?: number } = {}\n): Promise<MaterialState<T>> {\n return queueMaterialPatch(ctx, target, async () => {\n const ctrl = ctx.scope.controller(target)\n if (ctrl.state === \"idle\") await ctrl.resolve()\n const current = ctrl.get()\n if (current.kind !== \"json\") throw new Error(`Material \"${current.name}\" does not accept JSON Patch`)\n if (options.expectedRevision !== undefined && options.expectedRevision !== current.revision) {\n throw new MaterialConflictError(options.expectedRevision, current.revision)\n }\n ctrl.set({\n ...current,\n revision: current.revision + 1,\n state: applyJsonPatch(current.state, ops),\n })\n return ctrl.get()\n })\n}\n\nexport function derivedMaterial<TSource, TOutput>(\n name: string,\n source: Lite.Atom<MaterialState<TSource>>,\n derive: (state: TSource) => TOutput,\n options: { kind: MaterialKind; tags?: Lite.Tagged<any>[]; keepAlive?: boolean }\n): Lite.Atom<MaterialState<TOutput>> {\n return atom({\n keepAlive: options.keepAlive ?? true,\n deps: { source },\n tags: [materialKind(options.kind), ...(options.tags ?? [])],\n factory: (_ctx, deps) => ({\n name,\n kind: options.kind,\n revision: deps.source.revision,\n state: derive(deps.source.state),\n }),\n })\n}\n\nfunction queueMaterialPatch<T>(\n ctx: Lite.ExecutionContext,\n target: Lite.Atom<MaterialState<T>>,\n run: () => Promise<MaterialState<T>>\n): Promise<MaterialState<T>> {\n let scopePatches = materialPatches.get(ctx.scope)\n if (!scopePatches) {\n scopePatches = new WeakMap()\n materialPatches.set(ctx.scope, scopePatches)\n }\n const previous = scopePatches.get(target) ?? Promise.resolve()\n const current = previous.catch(() => undefined).then(run)\n const lock = current.then(() => undefined, () => undefined)\n scopePatches.set(target, lock)\n void lock.then(() => {\n if (scopePatches.get(target) === lock) scopePatches.delete(target)\n })\n return current\n}\n\nfunction applyJsonPatch<T>(source: T, ops: JsonPatchOperation[]): T {\n let document: unknown = clone(source)\n for (const op of ops) {\n if (op.path === \"\") {\n if (op.op === \"remove\") {\n document = null\n } else {\n document = clone(op.value)\n }\n continue\n }\n\n const parts = splitPointer(op.path)\n const key = parts.at(-1)\n if (key === undefined) throw new Error(\"JSON Patch path cannot be empty\")\n const parent = findPatchParent(document, parts.slice(0, -1))\n\n if (op.op === \"remove\") {\n removeValue(parent, key)\n } else {\n setValue(parent, key, clone(op.value), op.op)\n }\n }\n return document as T\n}\n\nfunction splitPointer(path: string): string[] {\n if (!path.startsWith(\"/\")) throw new Error(`Invalid JSON Pointer \"${path}\"`)\n return path\n .slice(1)\n .split(\"/\")\n .map((part) => part.replace(/~1/g, \"/\").replace(/~0/g, \"~\"))\n}\n\nfunction findPatchParent(document: unknown, parts: string[]): unknown {\n let current = document\n for (const part of parts) {\n if (Array.isArray(current)) {\n current = current[Number(part)]\n continue\n }\n if (isRecord(current)) {\n current = current[part]\n continue\n }\n throw new Error(`Cannot traverse JSON Patch path at \"${part}\"`)\n }\n return current\n}\n\nfunction setValue(parent: unknown, key: string, value: unknown, op: \"add\" | \"replace\"): void {\n if (Array.isArray(parent)) {\n if (key === \"-\") {\n parent.push(value)\n return\n }\n const index = Number(key)\n if (op === \"add\") parent.splice(index, 0, value)\n else parent[index] = value\n return\n }\n if (!isRecord(parent)) throw new Error(`Cannot set JSON Patch path \"${key}\"`)\n parent[key] = value\n}\n\nfunction removeValue(parent: unknown, key: string): void {\n if (Array.isArray(parent)) {\n parent.splice(Number(key), 1)\n return\n }\n if (!isRecord(parent)) throw new Error(`Cannot remove JSON Patch path \"${key}\"`)\n delete parent[key]\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nfunction clone<T>(value: T): T {\n return structuredClone(value)\n}\n\ntype Resolvable<Input, T> = T | ((input: Input, ctx: Lite.ExecutionContext) => T)\n\nexport interface CliBind {\n source: string\n target?: string\n mode?: \"ro\" | \"rw\"\n}\n\nexport interface CliIsolateOptions {\n bwrap?: string\n workdir?: string\n home?: string\n codexHome?: string\n writable?: boolean\n network?: boolean\n bind?: readonly CliBind[]\n env?: Record<string, string | undefined>\n}\n\nexport interface CliResult {\n stdout: string\n stderr: string\n exitCode: number | null\n signal: string | null\n}\n\nexport interface CliWorkerOptions<Input, Output> {\n name: string\n parse?: ((raw: unknown) => Input) | Lite.Typed<Input>\n command: Resolvable<Input, string>\n args?: Resolvable<Input, readonly string[]>\n stdin?: Resolvable<Input, string | undefined>\n cwd?: Resolvable<Input, string | undefined>\n env?: Resolvable<Input, Record<string, string | undefined> | undefined>\n isolate?: Resolvable<Input, boolean | CliIsolateOptions | undefined>\n timeoutMs?: number\n kind?: WorkerKind\n parseOutput?: (result: CliResult, input: Input) => Output\n tags?: Lite.Tagged<any>[]\n}\n\nexport class CliWorkerError extends Error {\n override readonly name = \"CliWorkerError\"\n\n constructor(message: string, readonly result: CliResult) {\n super(message)\n }\n}\n\nexport function cliWorker<Input = { prompt: string }, Output = string>(\n options: CliWorkerOptions<Input, Output>\n): Lite.Flow<Output, Input> {\n const config: Step = { kind: options.kind ?? \"cli\" }\n if (options.timeoutMs !== undefined) config.timeoutMs = options.timeoutMs\n const tags = [\n step(config),\n ...(options.tags ?? []),\n ]\n const factory = async (ctx: Lite.ExecutionContext & { readonly input: Input }) => {\n const input = ctx.input\n const result = await runCli({\n command: resolveRequiredValue(options.command, input, ctx),\n args: resolveValue(options.args ?? [], input, ctx),\n stdin: resolveValue(options.stdin, input, ctx),\n cwd: resolveValue(options.cwd, input, ctx),\n env: resolveValue(options.env, input, ctx),\n isolate: resolveValue(options.isolate, input, ctx),\n timeoutMs: options.timeoutMs,\n signal: ctx.data.seekTag(abortSignal),\n })\n return options.parseOutput ? options.parseOutput(result, input) : (result.stdout.trim() as Output)\n }\n\n const flowOptions = {\n name: options.name,\n tags,\n factory,\n }\n\n return typeof options.parse === \"function\"\n ? flow<Output, Input>({ ...flowOptions, parse: options.parse })\n : flow<Output, Input>({ ...flowOptions, parse: options.parse ?? typed<Input>() })\n}\n\nexport interface RunCliOptions {\n command: string\n args?: readonly string[]\n stdin?: string\n cwd?: string\n env?: Record<string, string | undefined>\n isolate?: boolean | CliIsolateOptions\n timeoutMs?: number\n signal?: AbortSignal\n}\n\nexport async function runCli(options: RunCliOptions): Promise<CliResult> {\n const { execFile } = await import(\"node:child_process\")\n const prepared = await prepareCli(options)\n return new Promise((resolve, reject) => {\n const child = execFile(prepared.command, [...prepared.args], {\n cwd: prepared.cwd,\n env: prepared.env,\n timeout: options.timeoutMs,\n signal: options.signal,\n }, async (error, stdout, stderr) => {\n await prepared.cleanup()\n const execError = error as ExecFileError | null\n const exitCode = typeof execError?.code === \"number\" ? execError.code : error ? null : 0\n const signal = execError?.signal ?? null\n const result = { stdout: String(stdout), stderr: String(stderr), exitCode, signal }\n if (execError?.killed && options.timeoutMs !== undefined) {\n reject(new CliWorkerError(`CLI command timed out after ${options.timeoutMs}ms`, result))\n return\n }\n if (execError?.name === \"AbortError\") {\n reject(new CliWorkerError(\"CLI command aborted\", result))\n return\n }\n if (error) {\n const label = exitCode === null ? error.message : `CLI command failed with exit code ${exitCode}`\n reject(new CliWorkerError(label, result))\n return\n }\n resolve(result)\n })\n\n child.stdin?.end(options.stdin)\n })\n}\n\ninterface PreparedCli {\n command: string\n args: readonly string[]\n cwd?: string\n env: Record<string, string | undefined>\n cleanup(): Promise<void>\n}\n\ninterface PreparedBind {\n source: string\n target: string\n mode: \"ro\" | \"rw\"\n}\n\nasync function prepareCli(options: RunCliOptions): Promise<PreparedCli> {\n if (!options.isolate) {\n return {\n command: options.command,\n args: options.args ?? [],\n cwd: options.cwd,\n env: { ...process.env, ...options.env },\n cleanup: async () => undefined,\n }\n }\n return prepareIsolatedCli(options, typeof options.isolate === \"boolean\" ? {} : options.isolate)\n}\n\nasync function prepareIsolatedCli(options: RunCliOptions, isolate: CliIsolateOptions): Promise<PreparedCli> {\n const { mkdtemp, rm, realpath } = await import(\"node:fs/promises\")\n const { existsSync } = await import(\"node:fs\")\n const { dirname, join, resolve } = await import(\"node:path\")\n const { tmpdir } = await import(\"node:os\")\n const hostCwd = resolve(options.cwd ?? process.cwd())\n const workdir = isolate.workdir ?? \"/workspace\"\n const tempDirs: string[] = []\n const home = isolate.home ?? await mkdtemp(join(tmpdir(), \"pumped-fn-home-\"))\n if (!isolate.home) tempDirs.push(home)\n const binds = new Map<string, PreparedBind>()\n addBind(binds, hostCwd, workdir, isolate.writable === true ? \"rw\" : \"ro\")\n addBind(binds, home, \"/home/agent\", \"rw\")\n if (isolate.codexHome) addBind(binds, isolate.codexHome, \"/codex-home\", \"rw\")\n const commandPath = await commandPathOf(options.command, process.env[\"PATH\"] ?? \"\", existsSync, realpath)\n const nodePath = await realpath(process.execPath)\n for (const dir of defaultCliDirs(existsSync)) addBind(binds, dir, dir, \"ro\")\n for (const dir of defaultCliCertDirs(existsSync)) addBind(binds, dir, dir, \"ro\")\n for (const file of defaultCliFiles(existsSync)) addBind(binds, file, file, \"ro\")\n if (commandPath) {\n addBind(binds, dirname(commandPath), dirname(commandPath), \"ro\")\n addBind(binds, dirname(dirname(commandPath)), dirname(dirname(commandPath)), \"ro\")\n }\n addBind(binds, dirname(nodePath), dirname(nodePath), \"ro\")\n addBind(binds, dirname(dirname(nodePath)), dirname(dirname(nodePath)), \"ro\")\n for (const bind of isolate.bind ?? []) addBind(binds, bind.source, bind.target ?? bind.source, bind.mode ?? \"ro\")\n const env = {\n PATH: isolatedPathEnv(commandPath, nodePath, dirname),\n HOME: \"/home/agent\",\n TMPDIR: \"/tmp\",\n ...(isolate.codexHome ? { CODEX_HOME: \"/codex-home\" } : {}),\n ...options.env,\n ...isolate.env,\n }\n return {\n command: isolate.bwrap ?? \"bwrap\",\n args: [\n \"--die-with-parent\",\n \"--unshare-all\",\n ...(isolate.network === true ? [\"--share-net\"] : []),\n \"--proc\",\n \"/proc\",\n \"--dev\",\n \"/dev\",\n \"--tmpfs\",\n \"/tmp\",\n \"--dir\",\n \"/etc\",\n \"--dir\",\n \"/home\",\n ...Object.entries(env).flatMap(([key, value]) => value === undefined ? [] : [\"--setenv\", key, value]),\n ...[...binds.values()].flatMap((bind) => [bind.mode === \"rw\" ? \"--bind\" : \"--ro-bind\", bind.source, bind.target]),\n \"--chdir\",\n workdir,\n \"--\",\n commandPath ?? options.command,\n ...(options.args ?? []),\n ],\n env: { PATH: process.env[\"PATH\"] },\n cleanup: async () => {\n await Promise.all(tempDirs.map((dir) => rm(dir, { recursive: true, force: true })))\n },\n }\n}\n\nfunction addBind(\n binds: Map<string, PreparedBind>,\n source: string,\n target: string,\n mode: \"ro\" | \"rw\"\n): void {\n binds.set(`${source}\\u0000${target}`, { source, target, mode })\n}\n\nfunction defaultCliDirs(exists: (path: string) => boolean): string[] {\n return [\n \"/usr/bin\",\n \"/bin\",\n \"/usr/lib\",\n \"/usr/lib64\",\n \"/lib\",\n \"/lib64\",\n ].filter((path, index, items) => items.indexOf(path) === index && exists(path))\n}\n\nfunction defaultCliCertDirs(exists: (path: string) => boolean): string[] {\n return [\n \"/etc/ssl\",\n \"/etc/pki\",\n \"/etc/ca-certificates\",\n \"/usr/share/ca-certificates\",\n \"/usr/local/share/ca-certificates\",\n ].filter((path, index, items) => items.indexOf(path) === index && exists(path))\n}\n\nfunction defaultCliFiles(exists: (path: string) => boolean): string[] {\n return [\n \"/etc/hosts\",\n \"/etc/resolv.conf\",\n ].filter((path, index, items) => items.indexOf(path) === index && exists(path))\n}\n\nfunction isolatedPathEnv(\n commandPath: string | undefined,\n nodePath: string,\n dirname: (path: string) => string\n): string {\n return [\n commandPath ? dirname(commandPath) : undefined,\n dirname(nodePath),\n \"/usr/bin\",\n \"/bin\",\n ].filter((path, index, items): path is string =>\n path !== undefined && items.indexOf(path) === index\n ).join(\":\")\n}\n\nasync function commandPathOf(\n command: string,\n pathEnv: string,\n exists: (path: string) => boolean,\n realpath: (path: string) => Promise<string>\n): Promise<string | undefined> {\n if (command.includes(\"/\")) return realpath(command)\n const found = pathEnv\n .split(\":\")\n .filter(Boolean)\n .map((dir) => `${dir}/${command}`)\n .find((path) => exists(path))\n return found ? realpath(found) : undefined\n}\n\ntype ExecFileError = Error & {\n code?: string | number | null\n signal?: string | null\n killed?: boolean\n}\n\nfunction resolveValue<Input, T>(\n value: Resolvable<Input, T> | undefined,\n input: Input,\n ctx: Lite.ExecutionContext\n): T | undefined {\n if (typeof value === \"function\") return (value as (input: Input, ctx: Lite.ExecutionContext) => T)(input, ctx)\n return value\n}\n\nfunction resolveRequiredValue<Input, T>(\n value: Resolvable<Input, T>,\n input: Input,\n ctx: Lite.ExecutionContext\n): T {\n if (typeof value === \"function\") return (value as (input: Input, ctx: Lite.ExecutionContext) => T)(input, ctx)\n return value\n}\n\nexport interface PromptInput {\n prompt: string\n}\n\nexport interface GuardState {\n text: string\n}\n\nexport function guard(name: string, text = \"\"): Lite.Atom<MaterialState<GuardState>> {\n return material(name, {\n kind: \"json\",\n initialState: { text },\n })\n}\n\nexport interface ClaudeCliWorkerOptions {\n name?: string\n command?: string\n extraArgs?: readonly string[]\n isolate?: boolean | CliIsolateOptions\n timeoutMs?: number\n tags?: Lite.Tagged<any>[]\n}\n\nexport function claudeCliWorker(options: ClaudeCliWorkerOptions = {}): Lite.Flow<string, PromptInput> {\n assertNoClaudeBare(options.extraArgs ?? [])\n return cliWorker({\n name: options.name ?? \"claude\",\n command: options.command ?? \"claude\",\n args: (input) => cliPromptArgs([\"-p\", ...(options.extraArgs ?? [])], input.prompt),\n isolate: options.isolate,\n timeoutMs: options.timeoutMs,\n kind: \"llm\",\n tags: options.tags,\n })\n}\n\nexport interface CodexCliWorkerOptions {\n name?: string\n command?: string\n sandbox?: \"read-only\" | \"workspace-write\" | \"danger-full-access\"\n extraArgs?: readonly string[]\n isolate?: boolean | CliIsolateOptions\n timeoutMs?: number\n tags?: Lite.Tagged<any>[]\n}\n\nexport function codexCliWorker(options: CodexCliWorkerOptions = {}): Lite.Flow<string, PromptInput> {\n return cliWorker({\n name: options.name ?? \"codex\",\n command: options.command ?? \"codex\",\n args: (input) => cliPromptArgs([\n \"exec\",\n \"-s\",\n options.sandbox ?? \"read-only\",\n ...(options.extraArgs ?? []),\n ], input.prompt),\n isolate: options.isolate,\n timeoutMs: options.timeoutMs,\n kind: \"llm\",\n tags: options.tags,\n })\n}\n\nexport interface CliHarnessOptions {\n name?: string\n command?: string\n extraArgs?: readonly string[]\n isolate?: boolean | CliIsolateOptions\n timeoutMs?: number\n guard?: Lite.Atom<MaterialState<GuardState>> | false\n prompt?: (request: ModelRequest, guard: GuardState) => string\n parse?: (output: string) => ModelResponse\n tags?: Lite.Tagged<any>[]\n}\n\nexport interface CodexHarnessOptions extends CliHarnessOptions {\n sandbox?: \"read-only\" | \"workspace-write\" | \"danger-full-access\"\n}\n\nexport function claudeHarness(options: CliHarnessOptions = {}): Model {\n const worker = claudeCliWorker({\n name: options.name ?? \"claude-harness\",\n command: options.command,\n extraArgs: [\"--no-session-persistence\", ...(options.extraArgs ?? [])],\n isolate: options.isolate ?? { network: true },\n timeoutMs: options.timeoutMs,\n tags: options.tags,\n })\n return cliHarnessModel(worker, {\n guard: options.guard === undefined ? guard(`${options.name ?? \"claude-harness\"}-guard`) : options.guard,\n prompt: options.prompt,\n parse: options.parse,\n })\n}\n\nexport function codexHarness(options: CodexHarnessOptions = {}): Model {\n const worker = codexCliWorker({\n name: options.name ?? \"codex-harness\",\n command: options.command,\n sandbox: options.sandbox,\n extraArgs: [\"--ephemeral\", \"--ignore-user-config\", ...(options.extraArgs ?? [])],\n isolate: options.isolate ?? { network: true },\n timeoutMs: options.timeoutMs,\n tags: options.tags,\n })\n return cliHarnessModel(worker, {\n guard: options.guard === undefined ? guard(`${options.name ?? \"codex-harness\"}-guard`) : options.guard,\n prompt: options.prompt,\n parse: options.parse,\n })\n}\n\ninterface CliHarnessConfig {\n guard: Lite.Atom<MaterialState<GuardState>> | false\n prompt?: (request: ModelRequest, guard: GuardState) => string\n parse?: (output: string) => ModelResponse\n}\n\nfunction cliHarnessModel(\n worker: Lite.Flow<string, PromptInput>,\n config: CliHarnessConfig\n): Model {\n return {\n complete: async (ctx, request) => {\n const current = config.guard ? await ctx.resolve(config.guard) : undefined\n const state = current?.state ?? { text: \"\" }\n const output = await ctx.exec({\n flow: worker,\n input: { prompt: config.prompt ? config.prompt(request, state) : modelPrompt(request, state) },\n })\n const response = config.parse ? config.parse(output) : parseModelOutput(output)\n if (config.guard && current) await collectGuard(ctx, config.guard, current, response)\n return response\n },\n }\n}\n\nasync function collectGuard(\n ctx: Lite.ExecutionContext,\n store: Lite.Atom<MaterialState<GuardState>>,\n current: MaterialState<GuardState>,\n response: ModelResponse\n): Promise<void> {\n const text = guardTextOf(response.guard)\n if (!text || current.state.text) return\n await patchMaterial(ctx, store, [\n { op: \"replace\", path: \"/text\", value: text },\n ], { expectedRevision: current.revision })\n}\n\nfunction modelPrompt(request: ModelRequest, guard: GuardState): string {\n return [\n \"Return JSON only.\",\n \"Schema: {\\\"content\\\":string,\\\"stop\\\"?:boolean,\\\"guard\\\"?:string,\\\"skillCalls\\\"?:array,\\\"toolCalls\\\"?:array,\\\"subagentCalls\\\"?:array}.\",\n guard.text\n ? `Guard:\\n${guard.text}`\n : \"First run only: set guard to the anti-goal that should prevent this agent from drifting.\",\n `Agent: ${request.agentName}`,\n request.instructions ? `Instructions:\\n${request.instructions}` : undefined,\n request.skills.length ? `Available skills:\\n${request.skills.map(formatCapability).join(\"\\n\")}` : undefined,\n request.loadedSkills.length ? `Loaded skills:\\n${request.loadedSkills.map(formatLoadedSkill).join(\"\\n\\n\")}` : undefined,\n request.tools.length ? `Available tools:\\n${request.tools.map(formatCapability).join(\"\\n\")}` : undefined,\n request.subagents.length ? `Available subagents:\\n${request.subagents.map(formatCapability).join(\"\\n\")}` : undefined,\n `Round: ${request.round}`,\n `Messages:\\n${request.messages.map(formatMessage).join(\"\\n\")}`,\n ].filter((item) => item !== undefined).join(\"\\n\\n\")\n}\n\nfunction parseModelOutput(output: string): ModelResponse {\n const value = readJson(output)\n if (!isRecord(value)) return { content: output, stop: true }\n const response: ModelResponse = {\n content: typeof value[\"content\"] === \"string\" ? value[\"content\"] : output,\n stop: typeof value[\"stop\"] === \"boolean\" ? value[\"stop\"] : true,\n }\n const guard = guardTextOf(value[\"guard\"] ?? value[\"antiGoal\"])\n const skillCalls = skillCallsOf(value[\"skillCalls\"])\n const toolCalls = toolCallsOf(value[\"toolCalls\"])\n const subagentCalls = subagentCallsOf(value[\"subagentCalls\"])\n if (guard) response.guard = guard\n if (skillCalls) response.skillCalls = skillCalls\n if (toolCalls) response.toolCalls = toolCalls\n if (subagentCalls) response.subagentCalls = subagentCalls\n return response\n}\n\nfunction readJson(output: string): unknown {\n const trimmed = output.trim()\n if (!trimmed) return undefined\n try {\n return JSON.parse(trimmed) as unknown\n } catch {\n const start = trimmed.indexOf(\"{\")\n const end = trimmed.lastIndexOf(\"}\")\n if (start === -1 || end <= start) return undefined\n try {\n return JSON.parse(trimmed.slice(start, end + 1)) as unknown\n } catch {\n return undefined\n }\n }\n}\n\nfunction skillCallsOf(value: unknown): SkillCall[] | undefined {\n if (!Array.isArray(value)) return undefined\n const calls = value.flatMap((item) => {\n if (!isRecord(item) || typeof item[\"name\"] !== \"string\") return []\n return [{\n name: item[\"name\"],\n ...(typeof item[\"id\"] === \"string\" ? { id: item[\"id\"] } : {}),\n }]\n })\n return calls.length ? calls : undefined\n}\n\nfunction toolCallsOf(value: unknown): ToolCall[] | undefined {\n if (!Array.isArray(value)) return undefined\n const calls = value.flatMap((item) => {\n if (!isRecord(item) || typeof item[\"name\"] !== \"string\") return []\n return [{\n name: item[\"name\"],\n input: item[\"input\"],\n ...(typeof item[\"id\"] === \"string\" ? { id: item[\"id\"] } : {}),\n }]\n })\n return calls.length ? calls : undefined\n}\n\nfunction subagentCallsOf(value: unknown): SubCall[] | undefined {\n if (!Array.isArray(value)) return undefined\n const calls = value.flatMap((item) => {\n if (!isRecord(item) || typeof item[\"name\"] !== \"string\") return []\n return [{\n name: item[\"name\"],\n input: turnInputOf(item[\"input\"]),\n ...(typeof item[\"id\"] === \"string\" ? { id: item[\"id\"] } : {}),\n }]\n })\n return calls.length ? calls : undefined\n}\n\nfunction turnInputOf(value: unknown): TurnInput {\n if (isRecord(value)) return value as TurnInput\n return { prompt: stringifyAgentValue(value) }\n}\n\nfunction guardTextOf(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined\n}\n\nfunction formatCapability(capability: Capability): string {\n return `- ${capability.name}: ${capability.description}`\n}\n\nfunction formatLoadedSkill(skill: LoadedSkill): string {\n return `## ${skill.name}\\n${skill.content}`\n}\n\nfunction formatMessage(message: Message): string {\n return message.name ? `${message.role}(${message.name}): ${message.content}` : `${message.role}: ${message.content}`\n}\n\nfunction assertNoClaudeBare(args: readonly string[]): void {\n if (args.some((arg) => arg === \"--bare\" || arg.startsWith(\"--bare=\"))) throw new Error(\"Claude harness must not use --bare\")\n}\n\nfunction cliPromptArgs(args: readonly string[], prompt: string): string[] {\n if (args.includes(\"--\")) throw new Error(\"CLI helper extraArgs cannot include --\")\n return [...args, \"--\", prompt]\n}\n\ntype MaybePromise<T> = T | Promise<T>\n\nexport type Role = \"system\" | \"user\" | \"assistant\" | \"tool\" | \"subagent\" | \"skill\"\n\nexport interface Message {\n role: Role\n content: string\n name?: string\n}\n\nexport interface ToolCall {\n name: string\n input: unknown\n id?: string\n}\n\nexport interface SubCall {\n name: string\n input: TurnInput\n id?: string\n}\n\nexport interface SkillCall {\n name: string\n id?: string\n}\n\nexport interface ModelResponse {\n content: string\n guard?: string\n skillCalls?: readonly SkillCall[]\n toolCalls?: readonly ToolCall[]\n subagentCalls?: readonly SubCall[]\n stop?: boolean\n}\n\nexport interface ModelRequest {\n agentName: string\n instructions: string\n messages: readonly Message[]\n tools: readonly Capability[]\n skills: readonly Capability[]\n loadedSkills: readonly LoadedSkill[]\n subagents: readonly Capability[]\n round: number\n}\n\nexport interface Model {\n complete(ctx: Lite.ExecutionContext, request: ModelRequest): MaybePromise<ModelResponse>\n}\n\nexport interface SandboxExecResult {\n stdout: string\n stderr: string\n exitCode: number\n}\n\nexport interface Sandbox {\n readFile(path: string): MaybePromise<string>\n writeFile(path: string, content: string): MaybePromise<void>\n exec(command: string, args?: readonly string[]): MaybePromise<SandboxExecResult>\n}\n\nexport interface TurnInput {\n messages?: readonly Message[]\n prompt?: string\n maxRounds?: number\n metadata?: Lite.JsonValue\n}\n\nexport interface Capability {\n name: string\n description: string\n}\n\nexport interface Tool<Output = unknown, Input = unknown> extends Capability {\n flow: Lite.Flow<Output, Input>\n}\n\ntype AnyTool = Tool<any, any>\n\nexport interface Skill {\n name: string\n description?: string\n load(ctx: Lite.ExecutionContext): MaybePromise<string>\n}\n\nexport interface LoadedSkill {\n name: string\n description?: string\n content: string\n}\n\nexport interface Sub extends Capability {\n agent: Agent\n}\n\nexport interface Agent {\n name: string\n description?: string\n instructions: string\n tools: readonly AnyTool[]\n skills: readonly Skill[]\n subagents: readonly Sub[]\n turn: Lite.Flow<TurnResult, TurnInput>\n maxRounds: number\n}\n\nexport interface AgentOptions {\n name: string\n description?: string\n instructions?: string\n tools?: readonly AnyTool[]\n skills?: readonly Skill[]\n subagents?: readonly Sub[]\n maxRounds?: number\n tags?: Lite.Tagged<any>[]\n}\n\nexport interface ChannelOptions<Input> {\n name: string\n parse: ((raw: unknown) => MaybePromise<Input>) | Lite.Typed<Input>\n agent: Agent\n input(ctx: Lite.ExecutionContext & { readonly input: Input }): MaybePromise<TurnInput>\n tags?: Lite.Tagged<any>[]\n}\n\nexport interface ScheduleOptions {\n name: string\n agent: Agent\n input(ctx: Lite.ExecutionContext): MaybePromise<TurnInput>\n tags?: Lite.Tagged<any>[]\n}\n\nexport interface ToolResult {\n name: string\n id?: string\n input: unknown\n output: unknown\n}\n\nexport interface SkillResult {\n name: string\n id?: string\n content: string\n}\n\nexport interface SubResult {\n name: string\n id?: string\n input: TurnInput\n output: TurnResult\n}\n\nexport interface TurnResult {\n agentName: string\n content: string\n messages: readonly Message[]\n skillResults: readonly SkillResult[]\n toolResults: readonly ToolResult[]\n subagentResults: readonly SubResult[]\n rounds: number\n events: readonly Event[]\n}\n\nexport interface SessionState {\n messages: readonly Message[]\n}\n\nexport interface SessionOptions {\n messages?: readonly Message[]\n tags?: Lite.Tagged<any>[]\n keepAlive?: boolean\n}\n\nexport type EventType =\n | \"agent_start\"\n | \"agent_model_start\"\n | \"agent_model_end\"\n | \"agent_skill_start\"\n | \"agent_skill_end\"\n | \"agent_tool_start\"\n | \"agent_tool_end\"\n | \"agent_subagent_start\"\n | \"agent_subagent_end\"\n | \"agent_end\"\n\nexport interface Event {\n index: number\n type: EventType\n agentName: string\n targetName?: string\n round?: number\n input?: unknown\n output?: unknown\n}\n\nexport interface EventBuffer {\n readonly events: readonly Event[]\n record(event: Omit<Event, \"index\">): Event\n}\n\nexport const events = resource<EventBuffer>({\n name: \"agent.events\",\n ownership: \"boundary\",\n factory: () => {\n let next = 0\n const events: Event[] = []\n return {\n get events() {\n return events\n },\n record(event) {\n const stored = { ...event, index: next++ }\n events.push(stored)\n return stored\n },\n }\n },\n})\n\nexport const model = tag<Model>({ label: \"agent.model\" })\nexport const sandbox = tag<Sandbox>({ label: \"agent.sandbox\" })\n\nexport function session(name: string, options: SessionOptions = {}): Lite.Atom<MaterialState<SessionState>> {\n return material(name, {\n kind: \"json\",\n initialState: { messages: options.messages ?? [] },\n tags: options.tags,\n keepAlive: options.keepAlive,\n })\n}\n\nexport interface ToolOptions<Output, Input> {\n name?: string\n description: string\n flow: Lite.Flow<Output, Input>\n}\n\nexport function tool<Output, Input>(options: ToolOptions<Output, Input>): Tool<Output, Input> {\n const name = options.name ?? options.flow.name\n if (!name) throw new Error(\"Agent tool requires a name\")\n return {\n name,\n description: options.description,\n flow: options.flow,\n }\n}\n\nexport interface SkillOptions {\n name: string\n description?: string\n content?: string\n load?: (ctx: Lite.ExecutionContext) => MaybePromise<string>\n}\n\nexport function skill(options: SkillOptions): Skill {\n if (options.load) {\n return {\n name: options.name,\n description: options.description,\n load: options.load,\n }\n }\n const content = options.content ?? \"\"\n return {\n name: options.name,\n description: options.description,\n load: () => content,\n }\n}\n\nexport interface SubOptions {\n name?: string\n description: string\n agent: Agent\n}\n\nexport function sub(options: SubOptions): Sub {\n return {\n name: options.name ?? options.agent.name,\n description: options.description,\n agent: options.agent,\n }\n}\n\nexport function agent(options: AgentOptions): Agent {\n const tools = options.tools ?? []\n const skills = options.skills ?? []\n const subagents = options.subagents ?? []\n const maxRounds = options.maxRounds ?? 4\n let agent: Agent\n const turn = flow({\n name: options.name,\n parse: typed<TurnInput>(),\n deps: { model: tags.required(model) },\n tags: agentStepTags({ workflow: true, kind: \"agent\" }, options.tags),\n factory: (ctx, deps) => executeAgentTurn(ctx, agent, deps.model),\n })\n agent = {\n name: options.name,\n description: options.description,\n instructions: options.instructions ?? \"\",\n tools,\n skills,\n subagents,\n turn,\n maxRounds,\n }\n return agent\n}\n\nfunction execTurn(\n ctx: Lite.ExecutionContext,\n agent: Agent,\n input: TurnInput,\n tags: readonly Lite.Tagged<any>[] = []\n): Promise<TurnResult> {\n return ctx.exec({\n flow: agent.turn,\n input,\n name: agent.name,\n tags: [...tags],\n })\n}\n\nexport async function send(\n ctx: Lite.ExecutionContext,\n session: Lite.Atom<MaterialState<SessionState>>,\n agent: Agent,\n input: TurnInput\n): Promise<TurnResult> {\n const current = await ctx.resolve(session)\n const result = await execTurn(ctx, agent, {\n ...input,\n messages: [\n ...current.state.messages,\n ...(input.messages ?? []),\n ],\n })\n await patchMaterial(ctx, session, [\n { op: \"replace\", path: \"/messages\", value: serializeMessages(result.messages) },\n ], { expectedRevision: current.revision })\n return result\n}\n\nexport function channel<Input>(options: ChannelOptions<Input>): Lite.Flow<TurnResult, Input> {\n const flowOptions = {\n name: options.name,\n tags: agentStepTags({ workflow: true, kind: \"channel\" }, options.tags),\n factory: async (ctx: Lite.ExecutionContext & { readonly input: Input }) =>\n execTurn(ctx, options.agent, await options.input(ctx)),\n }\n return typeof options.parse === \"function\"\n ? flow<TurnResult, Input>({ ...flowOptions, parse: options.parse })\n : flow<TurnResult, Input>({ ...flowOptions, parse: options.parse })\n}\n\nexport function schedule(options: ScheduleOptions): Lite.Flow<TurnResult, void> {\n return flow({\n name: options.name,\n tags: agentStepTags({ workflow: true, kind: \"schedule\" }, options.tags),\n factory: async (ctx) => execTurn(ctx, options.agent, await options.input(ctx)),\n })\n}\n\nexport interface EvalCheckResult {\n name: string\n passed: boolean\n details?: string\n}\n\nexport type EvalCheck = (result: TurnResult) => MaybePromise<EvalCheckResult>\n\nexport interface JudgeResult {\n name: string\n passed: boolean\n score?: number\n reason?: string\n}\n\nexport interface Judge {\n name: string\n evaluate(ctx: Lite.ExecutionContext, result: TurnResult): MaybePromise<JudgeResult>\n}\n\nexport interface EvalCase {\n name: string\n input: TurnInput\n checks?: readonly EvalCheck[]\n}\n\nexport interface Suite {\n name: string\n agent: Agent\n cases: readonly EvalCase[]\n judges: readonly Judge[]\n}\n\nexport interface SuiteOptions {\n name: string\n agent: Agent\n cases: readonly EvalCase[]\n judges?: readonly Judge[]\n}\n\nexport interface EvalCaseReport {\n name: string\n result: TurnResult\n checks: readonly EvalCheckResult[]\n judges: readonly JudgeResult[]\n passed: boolean\n}\n\nexport interface EvalReport {\n name: string\n cases: readonly EvalCaseReport[]\n passed: boolean\n}\n\nexport interface RunQuery {\n taskId: string\n runId: string\n}\n\nexport interface RunStep {\n key: WorkflowStepKey\n status: WorkflowStepEntry[\"status\"]\n targetName: string\n input?: unknown\n output?: unknown\n kind?: string\n}\n\nexport interface RunRecord {\n taskId: string\n runId: string\n status: \"pending\" | \"completed\"\n steps: readonly RunStep[]\n}\n\nexport interface RunLog extends WorkflowEventLog {\n entries(query?: Partial<RunQuery>): MaybePromise<readonly WorkflowStepEntry[]>\n}\n\nexport interface HttpOptions {\n name?: string\n agent: Agent\n input?: (request: Request) => MaybePromise<TurnInput>\n tags?: (request: Request) => MaybePromise<Lite.Tagged<any>[]>\n}\n\nexport function judge(options: Judge): Judge {\n return options\n}\n\nexport function suite(options: SuiteOptions): Suite {\n const judges = options.judges ?? []\n assertJudgeQuorum(judges)\n return {\n name: options.name,\n agent: options.agent,\n cases: options.cases,\n judges,\n }\n}\n\nexport function includes(text: string): EvalCheck {\n return (result) => ({\n name: `output includes \"${text}\"`,\n passed: result.content.includes(text),\n })\n}\n\nexport function used(name: string): EvalCheck {\n return (result) => ({\n name: `tool used \"${name}\"`,\n passed: result.toolResults.some((call) => call.name === name),\n })\n}\n\nexport function loaded(name: string): EvalCheck {\n return (result) => ({\n name: `skill loaded \"${name}\"`,\n passed: result.skillResults.some((call) => call.name === name),\n })\n}\n\nexport function delegated(name: string): EvalCheck {\n return (result) => ({\n name: `subagent used \"${name}\"`,\n passed: result.subagentResults.some((call) => call.name === name),\n })\n}\n\nexport async function runEval(ctx: Lite.ExecutionContext, target: Suite): Promise<EvalReport> {\n assertJudgeQuorum(target.judges)\n const cases: EvalCaseReport[] = []\n for (const item of target.cases) {\n const result = await execTurn(ctx, target.agent, item.input)\n const checks = await runEvalChecks(result, item.checks ?? [])\n const judges = await runEvalJudges(ctx, result, target.judges)\n cases.push({\n name: item.name,\n result,\n checks,\n judges,\n passed: checks.every((check) => check.passed) && judges.every((judge) => judge.passed),\n })\n }\n return {\n name: target.name,\n cases,\n passed: cases.every((item) => item.passed),\n }\n}\n\nexport async function inspect(log: RunLog, query: RunQuery): Promise<RunRecord> {\n const entries = (await log.entries(query)).filter((entry) =>\n entry.key.taskId === query.taskId && entry.key.runId === query.runId\n )\n const first = entries[0]\n if (!first) throw new Error(\"Run not found\")\n const steps = entries.map(runStep)\n return {\n taskId: query.taskId,\n runId: query.runId,\n status: steps.some((item) => item.status === \"pending\") ? \"pending\" : \"completed\",\n steps,\n }\n}\n\nexport function summary(report: EvalReport): Lite.JsonValue {\n return jsonValue({\n name: report.name,\n passed: report.passed,\n cases: report.cases.map((item) => ({\n name: item.name,\n passed: item.passed,\n output: item.result.content,\n checks: item.checks,\n judges: item.judges,\n tools: item.result.toolResults.map((call) => ({ name: call.name, output: call.output })),\n skills: item.result.skillResults.map((call) => ({ name: call.name })),\n subagents: item.result.subagentResults.map((call) => ({ name: call.name, output: call.output.content })),\n events: item.result.events.map((event) => ({\n type: event.type,\n agentName: event.agentName,\n targetName: event.targetName,\n round: event.round,\n })),\n })),\n })\n}\n\nexport function http(options: HttpOptions): Lite.Flow<Response, Request> {\n return flow({\n name: options.name ?? `${options.agent.name}-http`,\n parse: typed<Request>(),\n tags: agentStepTags({ workflow: true, kind: \"channel\" }),\n factory: async (ctx: Lite.ExecutionContext & { readonly input: Request }) => {\n const request = ctx.input\n const input = options.input ? await options.input(request) : await request.json() as TurnInput\n const tags = options.tags ? await options.tags(request) : []\n return Response.json(jsonValue(await execTurn(ctx, options.agent, input, tags)))\n },\n })\n}\n\nasync function executeAgentTurn(\n ctx: Lite.ExecutionContext & { readonly input: TurnInput },\n agent: Agent,\n model: Model\n): Promise<TurnResult> {\n const messages = initialMessages(ctx.input)\n const loadedSkills: LoadedSkill[] = []\n const skillResults: SkillResult[] = []\n const toolResults: ToolResult[] = []\n const subagentResults: SubResult[] = []\n const maxRounds = ctx.input.maxRounds ?? agent.maxRounds\n let content = \"\"\n let rounds = 0\n const startIndex = (await ctx.resolve(events)).events.length\n\n await recordAgentEvent(ctx, {\n type: \"agent_start\",\n agentName: agent.name,\n input: ctx.input,\n })\n\n for (let round = 0; round < maxRounds; round++) {\n rounds = round + 1\n await recordAgentEvent(ctx, {\n type: \"agent_model_start\",\n agentName: agent.name,\n round,\n input: messages,\n })\n const response = await model.complete(ctx, {\n agentName: agent.name,\n instructions: agent.instructions,\n messages,\n tools: agent.tools.map(agentToolCapability),\n skills: agent.skills.map(agentSkillCapability),\n loadedSkills,\n subagents: agent.subagents.map(agentSubagentCapability),\n round,\n })\n content = response.content\n await recordAgentEvent(ctx, {\n type: \"agent_model_end\",\n agentName: agent.name,\n round,\n output: response,\n })\n\n const skillCalls = response.skillCalls ?? []\n const toolCalls = response.toolCalls ?? []\n const subagentCalls = response.subagentCalls ?? []\n if (response.content) messages.push({ role: \"assistant\", content: response.content })\n if (response.stop === true || (skillCalls.length === 0 && toolCalls.length === 0 && subagentCalls.length === 0)) break\n\n for (const call of skillCalls) {\n const result = await executeAgentSkill(ctx, agent, call)\n loadedSkills.push({\n name: result.name,\n content: result.content,\n description: findByName(agent.skills, result.name, \"skill\").description,\n })\n skillResults.push(result)\n messages.push({\n role: \"skill\",\n name: result.name,\n content: result.content,\n })\n }\n\n for (const call of toolCalls) {\n const result = await executeAgentTool(ctx, agent, call)\n toolResults.push(result)\n messages.push({\n role: \"tool\",\n name: result.name,\n content: stringifyAgentValue(result.output),\n })\n }\n\n for (const call of subagentCalls) {\n const result = await executeAgentSubagent(ctx, agent, call)\n subagentResults.push(result)\n messages.push({\n role: \"subagent\",\n name: result.name,\n content: result.output.content,\n })\n }\n }\n\n await recordAgentEvent(ctx, {\n type: \"agent_end\",\n agentName: agent.name,\n output: content,\n })\n\n const buffer = await ctx.resolve(events)\n return {\n agentName: agent.name,\n content,\n messages,\n skillResults,\n toolResults,\n subagentResults,\n rounds,\n events: buffer.events.slice(startIndex),\n }\n}\n\nasync function executeAgentSkill(\n ctx: Lite.ExecutionContext,\n agent: Agent,\n call: SkillCall\n): Promise<SkillResult> {\n const target = findByName(agent.skills, call.name, \"skill\")\n await recordAgentEvent(ctx, {\n type: \"agent_skill_start\",\n agentName: agent.name,\n targetName: target.name,\n })\n const content = await ctx.exec({\n fn: (skillCtx) => target.load(skillCtx),\n params: [],\n name: target.name,\n tags: [agentStepTag({ workflow: true, kind: \"skill\" })],\n })\n await recordAgentEvent(ctx, {\n type: \"agent_skill_end\",\n agentName: agent.name,\n targetName: target.name,\n output: content,\n })\n return {\n name: target.name,\n id: call.id,\n content,\n }\n}\n\nasync function executeAgentTool(\n ctx: Lite.ExecutionContext,\n agent: Agent,\n call: ToolCall\n): Promise<ToolResult> {\n const target = findByName(agent.tools, call.name, \"tool\")\n await recordAgentEvent(ctx, {\n type: \"agent_tool_start\",\n agentName: agent.name,\n targetName: target.name,\n input: call.input,\n })\n const output = await ctx.exec({\n flow: target.flow as Lite.Flow<unknown, unknown>,\n rawInput: call.input,\n name: target.name,\n tags: [agentStepTag({ workflow: true, kind: \"tool\" }, target.flow.tags)],\n })\n await recordAgentEvent(ctx, {\n type: \"agent_tool_end\",\n agentName: agent.name,\n targetName: target.name,\n output,\n })\n return {\n name: target.name,\n id: call.id,\n input: call.input,\n output,\n }\n}\n\nasync function executeAgentSubagent(\n ctx: Lite.ExecutionContext,\n agent: Agent,\n call: SubCall\n): Promise<SubResult> {\n const target = findByName(agent.subagents, call.name, \"subagent\")\n await recordAgentEvent(ctx, {\n type: \"agent_subagent_start\",\n agentName: agent.name,\n targetName: target.name,\n input: call.input,\n })\n const output = await ctx.exec({\n flow: target.agent.turn,\n input: call.input,\n name: target.name,\n tags: [agentStepTag({ workflow: true, kind: \"subagent\" }, target.agent.turn.tags)],\n })\n await recordAgentEvent(ctx, {\n type: \"agent_subagent_end\",\n agentName: agent.name,\n targetName: target.name,\n output,\n })\n return {\n name: target.name,\n id: call.id,\n input: call.input,\n output,\n }\n}\n\nasync function recordAgentEvent(\n ctx: Lite.ExecutionContext,\n event: Omit<Event, \"index\">\n): Promise<Event> {\n return (await ctx.resolve(events)).record(event)\n}\n\nfunction initialMessages(input: TurnInput): Message[] {\n return [\n ...(input.messages ?? []),\n ...(input.prompt ? [{ role: \"user\" as const, content: input.prompt }] : []),\n ]\n}\n\nfunction agentStepTags(defaults: Step, source: Lite.Tagged<any>[] = []): Lite.Tagged<any>[] {\n return [\n agentStepTag(defaults, source),\n ...source.filter((tagged) => tagged.key !== step.key),\n ]\n}\n\nfunction agentStepTag(defaults: Step, source: Lite.Tagged<any>[] = []): Lite.Tagged<Step> {\n return step(Object.assign({}, defaults, ...step.collect(source)))\n}\n\nfunction agentToolCapability(tool: AnyTool): Capability {\n return {\n name: tool.name,\n description: tool.description,\n }\n}\n\nfunction agentSkillCapability(skill: Skill): Capability {\n return {\n name: skill.name,\n description: skill.description ?? \"\",\n }\n}\n\nfunction agentSubagentCapability(subagent: Sub): Capability {\n return {\n name: subagent.name,\n description: subagent.description,\n }\n}\n\nfunction findByName<T extends { name: string }>(items: readonly T[], name: string, kind: string): T {\n const found = items.find((item) => item.name === name)\n if (!found) throw new Error(`Agent ${kind} \"${name}\" not found`)\n return found\n}\n\nfunction runStep(entry: WorkflowStepEntry): RunStep {\n if (entry.status === \"pending\") {\n return {\n key: entry.key,\n status: entry.status,\n targetName: entry.targetName,\n input: entry.input,\n kind: entry.kind,\n }\n }\n if (entry.status === \"resolved\") {\n return {\n key: entry.key,\n status: entry.status,\n targetName: entry.targetName,\n output: entry.value,\n }\n }\n return {\n key: entry.key,\n status: entry.status,\n targetName: entry.targetName,\n output: entry.result,\n }\n}\n\nfunction stringifyAgentValue(value: unknown): string {\n if (typeof value === \"string\") return value\n if (value === undefined) return String(value)\n if (typeof value === \"bigint\" || typeof value === \"symbol\" || typeof value === \"function\") return String(value)\n const seen = new WeakSet<object>()\n const serialized = JSON.stringify(value, (_key, item: unknown) => {\n if (typeof item === \"bigint\" || typeof item === \"symbol\" || typeof item === \"function\") return String(item)\n if (typeof item === \"object\" && item !== null) {\n if (seen.has(item)) return \"[Circular]\"\n seen.add(item)\n }\n return item\n })\n return serialized ?? String(value)\n}\n\nfunction jsonValue(value: unknown, seen = new WeakSet<object>()): Lite.JsonValue {\n if (value === null) return null\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") return value\n if (value === undefined || typeof value === \"bigint\" || typeof value === \"symbol\" || typeof value === \"function\") return String(value)\n if (Array.isArray(value)) return value.map((item) => jsonValue(item, seen))\n if (typeof value === \"object\") {\n if (seen.has(value)) return \"[Circular]\"\n seen.add(value)\n return Object.fromEntries(Object.entries(value as Record<string, unknown>).map(([key, item]) => [key, jsonValue(item, seen)]))\n }\n return String(value)\n}\n\nfunction serializeMessages(messages: readonly Message[]): Lite.JsonValue {\n return messages.map((message) => {\n const serialized: Record<string, Lite.JsonValue> = {\n role: message.role,\n content: message.content,\n }\n if (message.name !== undefined) serialized[\"name\"] = message.name\n return serialized\n })\n}\n\nasync function runEvalChecks(\n result: TurnResult,\n checks: readonly EvalCheck[]\n): Promise<EvalCheckResult[]> {\n const results: EvalCheckResult[] = []\n for (const check of checks) results.push(await check(result))\n return results\n}\n\nfunction assertJudgeQuorum(judges: readonly Judge[]): void {\n if (judges.length === 1) throw new Error(\"Agent evals require zero judges or at least two judges\")\n}\n\nasync function runEvalJudges(\n ctx: Lite.ExecutionContext,\n result: TurnResult,\n judges: readonly Judge[]\n): Promise<JudgeResult[]> {\n const results: JudgeResult[] = []\n for (const judge of judges) results.push(await judge.evaluate(ctx, result))\n return results\n}\n"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@pumped-fn/agent-sdk",
3
+ "version": "1.0.0",
4
+ "private": false,
5
+ "description": "Agent workflow and app helpers for @pumped-fn/lite",
6
+ "type": "module",
7
+ "main": "./dist/index.cjs",
8
+ "module": "./dist/index.mjs",
9
+ "types": "./dist/index.d.cts",
10
+ "exports": {
11
+ ".": {
12
+ "import": {
13
+ "types": "./dist/index.d.mts",
14
+ "default": "./dist/index.mjs"
15
+ },
16
+ "require": {
17
+ "types": "./dist/index.d.cts",
18
+ "default": "./dist/index.cjs"
19
+ }
20
+ }
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "README.md",
25
+ "PATTERNS.md",
26
+ "LICENSE"
27
+ ],
28
+ "publishConfig": {
29
+ "access": "public"
30
+ },
31
+ "scripts": {
32
+ "build": "tsdown --config-loader tsx",
33
+ "typecheck": "tsgo --noEmit",
34
+ "test": "vitest run",
35
+ "test:watch": "vitest"
36
+ },
37
+ "peerDependencies": {
38
+ "@pumped-fn/lite": "^3.1.0"
39
+ },
40
+ "dependencies": {
41
+ "@pumped-fn/lite-extension-suspense": "workspace:^"
42
+ },
43
+ "devDependencies": {
44
+ "@pumped-fn/lite": "workspace:*",
45
+ "@types/node": "catalog:",
46
+ "@typescript/native-preview": "catalog:",
47
+ "tsdown": "catalog:",
48
+ "typescript": "catalog:",
49
+ "vite": "catalog:",
50
+ "vitest": "catalog:"
51
+ },
52
+ "license": "MIT",
53
+ "repository": {
54
+ "type": "git",
55
+ "directory": "packages/agent-sdk",
56
+ "url": "git+https://github.com/pumped-fn/pumped-fn.git"
57
+ }
58
+ }