@struktoai/mirage-core
Version:
A Unified Virtual Filesystem For AI Agents
83 lines • 4.71 kB
TypeScript
import { OutputStream } from '../../../io/stream.ts';
import { IOResult, type ByteSource } from '../../../io/types.ts';
import type { LanguageRuntime } from '../../../runtime/language.ts';
import type { CommandRuntime, OutputFn, RunResult } from '../../../runtime/types.ts';
import type { PathSpec, Producer } from '../../../types.ts';
import type { CommandFnResult, Context } from '../../config.ts';
/**
* A runtime run as a command's output, handed over as it runs.
*
* The one mapping from a run to a command's output shape: the interpreter
* commands, a script CLI, a program a runtime captured and a whole line all
* answer through here. The run starts when its output is first read and
* writes stdout into a bounded pipe, so a reader that falls behind holds the
* program back and the output is never held whole; what a transport could
* not stream lands at the end. The status, and the stderr the run returned,
* settle on the result as the output ends (`IOResult.output`), stderr after
* what the result already held. A reader that stops early stops the run,
* which then exits 141, as SIGPIPE leaves a program, and keeps the stderr it
* had written. A stopped run that does not end within the stop bound is left
* running, as a stopped handler is (`runCancellable`). Mirrors Python's
* `run_output`, whose cancel ends the run outright.
*
* @param run starts the run, given where it writes stdout, where it writes
* stderr and the signal that stops it.
* @param producer what made the output, for a program run past the
* workspace's own commands.
* @param errors takes stderr as the run writes it, after the stdout written
* before it has been read; undefined lands it on the result's stderr.
* @param stdin the run's input, closed once the output ends.
* @param signal the command's own abort, which stops the run too.
*/
export declare function runOutput(run: (output: OutputFn, errors: OutputFn, signal: AbortSignal) => Promise<RunResult>, producer?: Producer | null, errors?: OutputFn, stdin?: ByteSource | null, signal?: AbortSignal): [OutputStream, IOResult];
/**
* Whether a thrown error means the runtime itself is missing (exit 127),
* not that the program it ran failed.
*
* Args:
* err: the error the runtime threw.
*/
export declare function runtimeUnavailable(err: unknown): err is Error;
export declare function runtimeVersion(label: string, runtime: LanguageRuntime, env: Record<string, string>, signal?: AbortSignal, timeoutSeconds?: number): CommandFnResult;
/**
* The answer of an interpreter command no runtime runs: bash's
* `command not found`, exit 127, whatever the operands say.
*/
export declare function notBound(label: string): CommandFnResult;
/**
* Why policy will not let an interpreter command run its program; null
* when it may.
*
* The x check follows the program's entry point. A script operand asks
* the per-path entry point about the script's own path, so a session
* whose only x grant is one show subtree runs scripts there and nowhere
* else; inline code (-c/-e), -m and stdin keep the whole-session rule
* (`execAllowed`: any x grant), since no path holds them. Outside a
* workspace no per-path entry point is wired and `execAllowed` answers
* for files too. Mirrors Python's `exec_refusal`.
*
* @param label the command name used in the message.
* @param script the script operand, null for a program from -c, -m or
* stdin (`scriptOperand`).
* @param placement the command's exec policy; absent allows.
*/
export declare function execRefusal(label: string, script: PathSpec | null, placement: CommandRuntime | undefined): [null, IOResult] | null;
/**
* Run an interpreter command's operands on its bound runtime, the program's
* output handed over as it runs (`runOutput`). A failure of the runtime
* itself answers as the command: a missing engine 127, any other 1, an
* in-VM limit interrupt a timeout named after the command, as the
* workspace's own timer names it. A script the runtime could not read is
* the command's own read failure, left to the executor to render as any
* command's is, as Python lets it escape.
*
* @param label the command name used in messages.
* @param runtime the runtime bound to the command.
* @param paths the path operands.
* @param texts the text operands.
* @param ctx the command's context, its flags the runtime's switches.
* @param script the script operand (`scriptOperand`), null for a program
* from -c, -m or stdin.
*/
export declare function runInterpreter(label: string, runtime: LanguageRuntime, paths: PathSpec[], texts: string[], ctx: Context, script: PathSpec | null): CommandFnResult;
//# sourceMappingURL=interpreter.d.ts.map