From 09e46d757b8c74a2d4550698b31de7f11f15f267 Mon Sep 17 00:00:00 2001 From: catloversg <152669316+catloversg@users.noreply.github.com> Date: Sat, 11 Apr 2026 05:45:51 +0700 Subject: [PATCH] CLI: Add "hidden" mkdir command (#2646) --- src/Terminal/Terminal.ts | 10 +++++++--- src/Terminal/commands/mkdir.ts | 8 ++++++++ src/Terminal/getTabCompletionPossibilities.ts | 4 ++-- 3 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 src/Terminal/commands/mkdir.ts diff --git a/src/Terminal/Terminal.ts b/src/Terminal/Terminal.ts index 88527f37e..a3225a9dd 100644 --- a/src/Terminal/Terminal.ts +++ b/src/Terminal/Terminal.ts @@ -78,6 +78,7 @@ import { commitHash } from "../utils/helpers/commitHash"; import { apr1 } from "./commands/apr1"; import { changelog } from "./commands/changelog"; import { clear } from "./commands/clear"; +import { mkdir } from "./commands/mkdir"; import { currentNodeMults } from "../BitNode/BitNodeMultipliers"; import { Engine } from "../engine"; import { Directory, resolveDirectory, root } from "../Paths/Directory"; @@ -134,8 +135,12 @@ export const TerminalCommands: Record command !== "mkdir"); + export class Terminal { // Flags to determine whether the player is currently running a hack or an analyze action: TTimer | null = null; @@ -877,8 +882,7 @@ export class Terminal { } function findSimilarCommands(command: string): string[] { - const commands = Object.keys(TerminalCommands); - const offByOneLetter = commands.filter((c) => { + const offByOneLetter = supportedCommands.filter((c) => { if (c.length !== command.length) return false; let diff = 0; for (let i = 0; i < c.length; i++) { @@ -886,6 +890,6 @@ function findSimilarCommands(command: string): string[] { } return diff === 1; }); - const subset = commands.filter((c) => c.includes(command)).sort((a, b) => a.length - b.length); + const subset = supportedCommands.filter((c) => c.includes(command)).sort((a, b) => a.length - b.length); return Array.from(new Set([...offByOneLetter, ...subset])).slice(0, 3); } diff --git a/src/Terminal/commands/mkdir.ts b/src/Terminal/commands/mkdir.ts new file mode 100644 index 000000000..f51c82a43 --- /dev/null +++ b/src/Terminal/commands/mkdir.ts @@ -0,0 +1,8 @@ +import { Terminal } from "../../Terminal"; + +export function mkdir(): void { + Terminal.error( + "Directories do not exist in the Bitburner filesystem. They are simply part of the file path.\n" + + `For example, with "/foo/bar.txt", there is no actual "/foo" directory.`, + ); +} diff --git a/src/Terminal/getTabCompletionPossibilities.ts b/src/Terminal/getTabCompletionPossibilities.ts index 8a6d2fe3f..59773031e 100644 --- a/src/Terminal/getTabCompletionPossibilities.ts +++ b/src/Terminal/getTabCompletionPossibilities.ts @@ -11,7 +11,7 @@ import libarg from "arg"; import { getAllDirectories, resolveDirectory, root } from "../Paths/Directory"; import { isLegacyScript, resolveScriptFilePath } from "../Paths/ScriptFilePath"; import { enums } from "../NetscriptFunctions"; -import { TerminalCommands } from "./Terminal"; +import { supportedCommands } from "./Terminal"; import { Terminal } from "../Terminal"; import { parseUnknownError } from "../utils/ErrorHelper"; import { DarknetServer } from "../Server/DarknetServer"; @@ -84,7 +84,7 @@ export async function getTabCompletionPossibilities(terminalText: string, baseDi const addAliases = () => addGeneric({ iterable: Aliases.keys() }); const addGlobalAliases = () => addGeneric({ iterable: GlobalAliases.keys() }); - const addCommands = () => addGeneric({ iterable: Object.keys(TerminalCommands) }); + const addCommands = () => addGeneric({ iterable: supportedCommands }); const addDarkwebItems = () => addGeneric({ iterable: Object.values(DarkWebItems).map((item) => item.program) }); const addServerNames = () => addGeneric({