Index: frontend/node_modules/ansi-escapes/index.d.ts
===================================================================
--- frontend/node_modules/ansi-escapes/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/ansi-escapes/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,248 @@
+/// <reference types="node"/>
+import {LiteralUnion} from 'type-fest';
+
+declare namespace ansiEscapes {
+	interface ImageOptions {
+		/**
+		The width is given as a number followed by a unit, or the word `'auto'`.
+
+		- `N`: N character cells.
+		- `Npx`: N pixels.
+		- `N%`: N percent of the session's width or height.
+		- `auto`: The image's inherent size will be used to determine an appropriate dimension.
+		*/
+		readonly width?: LiteralUnion<'auto', number | string>;
+
+		/**
+		The height is given as a number followed by a unit, or the word `'auto'`.
+
+		- `N`: N character cells.
+		- `Npx`: N pixels.
+		- `N%`: N percent of the session's width or height.
+		- `auto`: The image's inherent size will be used to determine an appropriate dimension.
+		*/
+		readonly height?: LiteralUnion<'auto', number | string>;
+
+		readonly preserveAspectRatio?: boolean;
+	}
+
+	interface AnnotationOptions {
+		/**
+		Nonzero number of columns to annotate.
+
+		Default: The remainder of the line.
+		*/
+		readonly length?: number;
+
+		/**
+		Starting X coordinate.
+
+		Must be used with `y` and `length`.
+
+		Default: The cursor position
+		*/
+		readonly x?: number;
+
+		/**
+		Starting Y coordinate.
+
+		Must be used with `x` and `length`.
+
+		Default: Cursor position.
+		*/
+		readonly y?: number;
+
+		/**
+		Create a "hidden" annotation.
+
+		Annotations created this way can be shown using the "Show Annotations" iTerm command.
+		*/
+		readonly isHidden?: boolean;
+	}
+}
+
+declare const ansiEscapes: {
+	/**
+	Set the absolute position of the cursor. `x0` `y0` is the top left of the screen.
+	*/
+	cursorTo(x: number, y?: number): string;
+
+	/**
+	Set the position of the cursor relative to its current position.
+	*/
+	cursorMove(x: number, y?: number): string;
+
+	/**
+	Move cursor up a specific amount of rows.
+
+	@param count - Count of rows to move up. Default is `1`.
+	*/
+	cursorUp(count?: number): string;
+
+	/**
+	Move cursor down a specific amount of rows.
+
+	@param count - Count of rows to move down. Default is `1`.
+	*/
+	cursorDown(count?: number): string;
+
+	/**
+	Move cursor forward a specific amount of rows.
+
+	@param count - Count of rows to move forward. Default is `1`.
+	*/
+	cursorForward(count?: number): string;
+
+	/**
+	Move cursor backward a specific amount of rows.
+
+	@param count - Count of rows to move backward. Default is `1`.
+	*/
+	cursorBackward(count?: number): string;
+
+	/**
+	Move cursor to the left side.
+	*/
+	cursorLeft: string;
+
+	/**
+	Save cursor position.
+	*/
+	cursorSavePosition: string;
+
+	/**
+	Restore saved cursor position.
+	*/
+	cursorRestorePosition: string;
+
+	/**
+	Get cursor position.
+	*/
+	cursorGetPosition: string;
+
+	/**
+	Move cursor to the next line.
+	*/
+	cursorNextLine: string;
+
+	/**
+	Move cursor to the previous line.
+	*/
+	cursorPrevLine: string;
+
+	/**
+	Hide cursor.
+	*/
+	cursorHide: string;
+
+	/**
+	Show cursor.
+	*/
+	cursorShow: string;
+
+	/**
+	Erase from the current cursor position up the specified amount of rows.
+
+	@param count - Count of rows to erase.
+	*/
+	eraseLines(count: number): string;
+
+	/**
+	Erase from the current cursor position to the end of the current line.
+	*/
+	eraseEndLine: string;
+
+	/**
+	Erase from the current cursor position to the start of the current line.
+	*/
+	eraseStartLine: string;
+
+	/**
+	Erase the entire current line.
+	*/
+	eraseLine: string;
+
+	/**
+	Erase the screen from the current line down to the bottom of the screen.
+	*/
+	eraseDown: string;
+
+	/**
+	Erase the screen from the current line up to the top of the screen.
+	*/
+	eraseUp: string;
+
+	/**
+	Erase the screen and move the cursor the top left position.
+	*/
+	eraseScreen: string;
+
+	/**
+	Scroll display up one line.
+	*/
+	scrollUp: string;
+
+	/**
+	Scroll display down one line.
+	*/
+	scrollDown: string;
+
+	/**
+	Clear the terminal screen. (Viewport)
+	*/
+	clearScreen: string;
+
+	/**
+	Clear the whole terminal, including scrollback buffer. (Not just the visible part of it)
+	*/
+	clearTerminal: string;
+
+	/**
+	Output a beeping sound.
+	*/
+	beep: string;
+
+	/**
+	Create a clickable link.
+
+	[Supported terminals.](https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda) Use [`supports-hyperlinks`](https://github.com/jamestalmage/supports-hyperlinks) to detect link support.
+	*/
+	link(text: string, url: string): string;
+
+	/**
+	Display an image.
+
+	_Currently only supported on iTerm2 >=3_
+
+	See [term-img](https://github.com/sindresorhus/term-img) for a higher-level module.
+
+	@param buffer - Buffer of an image. Usually read in with `fs.readFile()`.
+	*/
+	image(buffer: Buffer, options?: ansiEscapes.ImageOptions): string;
+
+	iTerm: {
+		/**
+		[Inform iTerm2](https://www.iterm2.com/documentation-escape-codes.html) of the current directory to help semantic history and enable [Cmd-clicking relative paths](https://coderwall.com/p/b7e82q/quickly-open-files-in-iterm-with-cmd-click).
+
+		@param cwd - Current directory. Default: `process.cwd()`.
+		*/
+		setCwd(cwd?: string): string;
+
+		/**
+		An annotation looks like this when shown:
+
+		![screenshot of iTerm annotation](https://user-images.githubusercontent.com/924465/64382136-b60ac700-cfe9-11e9-8a35-9682e8dc4b72.png)
+
+		See the [iTerm Proprietary Escape Codes documentation](https://iterm2.com/documentation-escape-codes.html) for more information.
+
+		@param message - The message to display within the annotation. The `|` character is disallowed and will be stripped.
+		@returns An escape code which will create an annotation when printed in iTerm2.
+		*/
+		annotation(message: string, options?: ansiEscapes.AnnotationOptions): string;
+	};
+
+	// TODO: remove this in the next major version
+	default: typeof ansiEscapes;
+};
+
+export = ansiEscapes;
