import { HttpSpacePrimitives } from "../../common/spaces/http_space_primitives.ts"; import { SysCallMapping } from "../../plugos/system.ts"; export function shellSyscalls( httpSpacePrimitives?: HttpSpacePrimitives, ): SysCallMapping { return { "shell.run": async ( _ctx, cmd: string, args: string[], ): Promise<{ stdout: string; stderr: string; code: number }> => { if (!httpSpacePrimitives) { throw new Error("Not supported in fully local mode"); } const resp = httpSpacePrimitives.authenticatedFetch( `${httpSpacePrimitives.url}/.rpc`, { method: "POST", body: JSON.stringify({ operation: "shell", cmd, args, }), }, ); const { code, stderr, stdout } = await (await resp).json(); if (code !== 0) { throw new Error(stderr); } return { code, stderr, stdout }; }, }; }