import type { Item } from '../fs/Item' import type { Program } from '../program/Program' import type { Terminal } from '../terminal/Terminal' import type { EventBroadcaster } from '../utils/EventBroadcaster' export abstract class Shell { readonly abstract Version: string readonly abstract Name: string broadcaster: EventBroadcaster readonly terminal: Terminal constructor(broadcaster: EventBroadcaster, terminal: Terminal) { this.broadcaster = broadcaster this.terminal = terminal } abstract LoadProgram(program: Program, name: string): void abstract ExecuteProgram(name: string, args: string[]): void abstract Init(): Promise abstract SetWorkingDirectory(directory: Item): Promise }