diff --git a/src/commands/internal/dev/npm-link-or-shim.ts b/src/commands/internal/dev/npm-link-or-shim.ts index 7da82a7cd84..9a34768e610 100644 --- a/src/commands/internal/dev/npm-link-or-shim.ts +++ b/src/commands/internal/dev/npm-link-or-shim.ts @@ -14,7 +14,6 @@ export default class InternalDevNpmLinkOrShimCommand extends NemoClawCommand { static usage = ["internal dev npm-link-or-shim [--repo-root ]"]; static examples = ["<%= config.bin %> internal dev npm-link-or-shim"]; static flags = { - help: Flags.help({ char: "h" }), "repo-root": Flags.string({ description: "Repository root to expose", hidden: true }), }; diff --git a/src/commands/internal/dns/fix-coredns.ts b/src/commands/internal/dns/fix-coredns.ts index 3dbf06681db..30bb9b84f62 100644 --- a/src/commands/internal/dns/fix-coredns.ts +++ b/src/commands/internal/dns/fix-coredns.ts @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Args, Flags } from "@oclif/core"; +import { Args } from "@oclif/core"; import { NemoClawCommand } from "../../../lib/cli/nemoclaw-oclif-command"; import { runFixCoreDns } from "../../../lib/actions/dns"; @@ -17,7 +17,6 @@ export default class InternalDnsFixCoreDnsCommand extends NemoClawCommand { gatewayName: Args.string({ description: "OpenShell gateway name", required: false }), }; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/commands/internal/dns/setup-proxy.ts b/src/commands/internal/dns/setup-proxy.ts index f5ffc072c58..b4b91e463f3 100644 --- a/src/commands/internal/dns/setup-proxy.ts +++ b/src/commands/internal/dns/setup-proxy.ts @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Args, Flags } from "@oclif/core"; +import { Args } from "@oclif/core"; import { NemoClawCommand } from "../../../lib/cli/nemoclaw-oclif-command"; import { runSetupDnsProxy } from "../../../lib/actions/dns"; @@ -18,7 +18,6 @@ export default class InternalDnsSetupProxyCommand extends NemoClawCommand { sandboxName: Args.string({ description: "Sandbox name", required: true }), }; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/commands/internal/installer/normalize-env.ts b/src/commands/internal/installer/normalize-env.ts index 482186b22ce..a7c2fb3ae79 100644 --- a/src/commands/internal/installer/normalize-env.ts +++ b/src/commands/internal/installer/normalize-env.ts @@ -14,7 +14,6 @@ export default class InternalInstallerNormalizeEnvCommand extends NemoClawComman static usage = ["internal installer normalize-env [--json]"]; static examples = ["<%= config.bin %> internal installer normalize-env --provider cloud --json"]; static flags = { - help: Flags.help({ char: "h" }), json: Flags.boolean({ description: "Print normalized values as JSON" }), "install-ref": Flags.string({ description: "NEMOCLAW_INSTALL_REF value" }), "install-tag": Flags.string({ description: "NEMOCLAW_INSTALL_TAG value" }), @@ -29,7 +28,7 @@ export default class InternalInstallerNormalizeEnvCommand extends NemoClawComman NEMOCLAW_PROVIDER: flags.provider ?? process.env.NEMOCLAW_PROVIDER, }); - if (flags.json) console.log(JSON.stringify(normalized, null, 2)); + if (flags.json) this.logJson(normalized); else console.log(`ref=${normalized.installRef} provider=${normalized.provider.normalized ?? ""}`); } } diff --git a/src/commands/internal/installer/plan.ts b/src/commands/internal/installer/plan.ts index 5b96c7d6ec0..ece5c17ecfc 100644 --- a/src/commands/internal/installer/plan.ts +++ b/src/commands/internal/installer/plan.ts @@ -14,7 +14,6 @@ export default class InternalInstallerPlanCommand extends NemoClawCommand { static usage = ["internal installer plan [--json]"]; static examples = ["<%= config.bin %> internal installer plan --json --provider nim --install-ref v0.1.0"]; static flags = { - help: Flags.help({ char: "h" }), json: Flags.boolean({ description: "Print the installer plan as JSON" }), "install-ref": Flags.string({ description: "Install ref override" }), "install-tag": Flags.string({ description: "Install tag fallback" }), @@ -44,7 +43,7 @@ export default class InternalInstallerPlanCommand extends NemoClawCommand { stampedVersion: flags["stamped-version"], }); - if (flags.json) console.log(JSON.stringify(plan, null, 2)); + if (flags.json) this.logJson(plan); else console.log(`Installer plan: ref '${plan.installRef}', version '${plan.installerVersion}'`); } } diff --git a/src/commands/internal/installer/resolve-release-tag.ts b/src/commands/internal/installer/resolve-release-tag.ts index ca3fefb08e4..c4c270af6ea 100644 --- a/src/commands/internal/installer/resolve-release-tag.ts +++ b/src/commands/internal/installer/resolve-release-tag.ts @@ -14,7 +14,6 @@ export default class InternalInstallerResolveReleaseTagCommand extends NemoClawC static usage = ["internal installer resolve-release-tag [--json]"]; static examples = ["<%= config.bin %> internal installer resolve-release-tag --install-ref v0.1.0"]; static flags = { - help: Flags.help({ char: "h" }), json: Flags.boolean({ description: "Print the resolved ref as JSON" }), "install-ref": Flags.string({ description: "NEMOCLAW_INSTALL_REF value" }), "install-tag": Flags.string({ description: "NEMOCLAW_INSTALL_TAG value" }), @@ -27,7 +26,7 @@ export default class InternalInstallerResolveReleaseTagCommand extends NemoClawC NEMOCLAW_INSTALL_TAG: flags["install-tag"] ?? process.env.NEMOCLAW_INSTALL_TAG, }); - if (flags.json) console.log(JSON.stringify({ installRef }, null, 2)); + if (flags.json) this.logJson({ installRef }); else console.log(installRef); } } diff --git a/src/commands/internal/uninstall/classify-shim.ts b/src/commands/internal/uninstall/classify-shim.ts index 38312ce9938..2b59619b25c 100644 --- a/src/commands/internal/uninstall/classify-shim.ts +++ b/src/commands/internal/uninstall/classify-shim.ts @@ -17,14 +17,13 @@ export default class InternalUninstallClassifyShimCommand extends NemoClawComman path: Args.string({ description: "Shim path to classify", required: true }), }; static flags = { - help: Flags.help({ char: "h" }), json: Flags.boolean({ description: "Print classification as JSON" }), }; public async run(): Promise { const { args, flags } = await this.parse(InternalUninstallClassifyShimCommand); const classification = classifyShimPath(args.path); - if (flags.json) console.log(JSON.stringify(classification, null, 2)); + if (flags.json) this.logJson(classification); else console.log(`${classification.kind}: ${classification.reason}`); } } diff --git a/src/commands/internal/uninstall/plan.ts b/src/commands/internal/uninstall/plan.ts index 72b99d5e3dd..a118f19a95f 100644 --- a/src/commands/internal/uninstall/plan.ts +++ b/src/commands/internal/uninstall/plan.ts @@ -15,7 +15,6 @@ export default class InternalUninstallPlanCommand extends NemoClawCommand { static usage = ["internal uninstall plan [--json] [--delete-models] [--keep-openshell]"]; static examples = [`${CLI_NAME} internal uninstall plan --json --yes`]; static flags = { - help: Flags.help({ char: "h" }), json: Flags.boolean({ description: "Print the uninstall plan as JSON" }), yes: Flags.boolean({ description: "Accepted for parity with run-plan; ignored while planning" }), "delete-models": Flags.boolean({ description: `Plan removal of ${CLI_DISPLAY_NAME}-pulled Ollama models` }), @@ -31,7 +30,7 @@ export default class InternalUninstallPlanCommand extends NemoClawCommand { gatewayName: flags.gateway, keepOpenShell: flags["keep-openshell"] ?? false, }); - if (flags.json) console.log(JSON.stringify(plan, null, 2)); + if (flags.json) this.logJson(plan); else console.log(`Uninstall plan: ${plan.steps.length} steps for gateway '${plan.gatewayName}'`); } } diff --git a/src/commands/internal/uninstall/run-plan.ts b/src/commands/internal/uninstall/run-plan.ts index b3f1b58056e..e0336141ebd 100644 --- a/src/commands/internal/uninstall/run-plan.ts +++ b/src/commands/internal/uninstall/run-plan.ts @@ -15,7 +15,6 @@ export default class InternalUninstallRunPlanCommand extends NemoClawCommand { static usage = ["internal uninstall run-plan [--yes] [--keep-openshell] [--delete-models]"]; static examples = [`${CLI_NAME} internal uninstall run-plan --yes`]; static flags = { - help: Flags.help({ char: "h" }), yes: Flags.boolean({ description: "Skip the confirmation prompt" }), "keep-openshell": Flags.boolean({ description: "Leave the openshell binary installed" }), "delete-models": Flags.boolean({ description: `Remove ${CLI_DISPLAY_NAME}-pulled Ollama models` }), diff --git a/src/lib/cli/oclif-command-metadata.test.ts b/src/lib/cli/oclif-command-metadata.test.ts index a906ceedd23..a97ea23400d 100644 --- a/src/lib/cli/oclif-command-metadata.test.ts +++ b/src/lib/cli/oclif-command-metadata.test.ts @@ -4,6 +4,10 @@ import { Config as OclifConfig } from "@oclif/core"; import { describe, expect, it } from "vitest"; +type OclifCommandClass = { + flags?: Record; +}; + function extendsNemoClawCommand(commandClass: unknown): boolean { if (typeof commandClass !== "function") return false; let current = Object.getPrototypeOf(commandClass) as { name?: string } | null; @@ -14,6 +18,14 @@ function extendsNemoClawCommand(commandClass: unknown): boolean { return false; } +function commandOwnsHelpFlag(commandClass: unknown): boolean { + return ( + typeof commandClass === "function" && + Object.hasOwn(commandClass as OclifCommandClass, "flags") && + Object.hasOwn((commandClass as OclifCommandClass).flags ?? {}, "help") + ); +} + describe("oclif command metadata", () => { it("keeps discovered commands on the shared NemoClaw oclif base", async () => { const config = await OclifConfig.load(process.cwd()); @@ -27,6 +39,18 @@ describe("oclif command metadata", () => { expect(nonConforming).toEqual([]); }); + it("keeps the help flag centralized on the shared base command", async () => { + const config = await OclifConfig.load(process.cwd()); + const duplicatedHelpFlags: string[] = []; + + for (const command of config.commands) { + const commandClass = await command.load(); + if (commandOwnsHelpFlag(commandClass)) duplicatedHelpFlags.push(command.id); + } + + expect(duplicatedHelpFlags).toEqual([]); + }); + it("keeps public discovered commands documented in oclif statics", async () => { const config = await OclifConfig.load(process.cwd()); const publicCommands = config.commands.filter((command) => command.hidden !== true); diff --git a/src/lib/commands/credentials.ts b/src/lib/commands/credentials.ts index be26a172e4d..35e7d763b4f 100644 --- a/src/lib/commands/credentials.ts +++ b/src/lib/commands/credentials.ts @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Flags } from "@oclif/core"; import { NemoClawCommand } from "../cli/nemoclaw-oclif-command"; import { printCredentialsUsage } from "./credentials/common"; @@ -18,7 +17,6 @@ export default class CredentialsCommand extends NemoClawCommand { "<%= config.bin %> credentials reset nvidia-prod --yes", ]; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/lib/commands/credentials/list.ts b/src/lib/commands/credentials/list.ts index b1f3ac6fdd6..43594f5da05 100644 --- a/src/lib/commands/credentials/list.ts +++ b/src/lib/commands/credentials/list.ts @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Flags } from "@oclif/core"; import { NemoClawCommand } from "../../cli/nemoclaw-oclif-command"; import { CLI_NAME } from "../../cli/branding"; @@ -17,7 +16,6 @@ export default class CredentialsListCommand extends NemoClawCommand { static usage = ["credentials list"]; static examples = ["<%= config.bin %> credentials list"]; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/lib/commands/credentials/reset.ts b/src/lib/commands/credentials/reset.ts index 25c2f32cacc..42e0571f0b2 100644 --- a/src/lib/commands/credentials/reset.ts +++ b/src/lib/commands/credentials/reset.ts @@ -28,7 +28,6 @@ export default class CredentialsResetCommand extends NemoClawCommand { }), }; static flags = { - help: Flags.help({ char: "h" }), yes: Flags.boolean({ char: "y", description: "Skip the confirmation prompt" }), }; diff --git a/src/lib/commands/debug.ts b/src/lib/commands/debug.ts index 52c743d0a9e..49765575c97 100644 --- a/src/lib/commands/debug.ts +++ b/src/lib/commands/debug.ts @@ -80,7 +80,6 @@ export default class DebugCliCommand extends NemoClawCommand { "<%= config.bin %> debug --output /tmp/nemoclaw-debug.tar.gz", ]; static flags = { - help: Flags.help({ char: "h" }), quick: Flags.boolean({ char: "q", description: "Only collect minimal diagnostics" }), output: Flags.string({ char: "o", description: "Write a tarball to FILE" }), sandbox: Flags.string({ description: "Target sandbox name" }), diff --git a/src/lib/commands/deploy.ts b/src/lib/commands/deploy.ts index 51c1706d173..bad518b689b 100644 --- a/src/lib/commands/deploy.ts +++ b/src/lib/commands/deploy.ts @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Args, Flags } from "@oclif/core"; +import { Args } from "@oclif/core"; import { NemoClawCommand } from "../cli/nemoclaw-oclif-command"; import { runDeployAction } from "../actions/global"; @@ -21,7 +21,6 @@ export default class DeployCliCommand extends NemoClawCommand { }), }; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/lib/commands/deprecated/start.ts b/src/lib/commands/deprecated/start.ts index e0d4f75efa7..c6c4c2b0dd3 100644 --- a/src/lib/commands/deprecated/start.ts +++ b/src/lib/commands/deprecated/start.ts @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Flags } from "@oclif/core"; import { NemoClawCommand } from "../../cli/nemoclaw-oclif-command"; import { CLI_NAME } from "../../cli/branding"; @@ -17,7 +16,6 @@ export default class DeprecatedStartCommand extends NemoClawCommand { static usage = ["start"]; static examples = ["<%= config.bin %> start"]; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/lib/commands/deprecated/stop.ts b/src/lib/commands/deprecated/stop.ts index 272ef927a21..d04a3da460f 100644 --- a/src/lib/commands/deprecated/stop.ts +++ b/src/lib/commands/deprecated/stop.ts @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Flags } from "@oclif/core"; import { NemoClawCommand } from "../../cli/nemoclaw-oclif-command"; import { CLI_NAME } from "../../cli/branding"; @@ -17,7 +16,6 @@ export default class DeprecatedStopCommand extends NemoClawCommand { static usage = ["stop"]; static examples = ["<%= config.bin %> stop"]; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/lib/commands/gateway-token.ts b/src/lib/commands/gateway-token.ts index 3a602d0127f..13826c22bcb 100644 --- a/src/lib/commands/gateway-token.ts +++ b/src/lib/commands/gateway-token.ts @@ -59,7 +59,6 @@ export default class GatewayTokenCliCommand extends NemoClawCommand { }), }; static flags = { - help: Flags.help({ char: "h" }), quiet: Flags.boolean({ char: "q", description: "Suppress the stderr security warning" }), }; diff --git a/src/lib/commands/onboard/common.ts b/src/lib/commands/onboard/common.ts index 9b78fb21083..d4c3044bbaa 100644 --- a/src/lib/commands/onboard/common.ts +++ b/src/lib/commands/onboard/common.ts @@ -41,7 +41,6 @@ export type OnboardFlags = { export function buildOnboardFlags(): Record { return { - help: Flags.help({ char: "h" }), "non-interactive": Flags.boolean({ description: "Run without interactive prompts" }), resume: Flags.boolean({ description: "Resume an interrupted onboarding session", diff --git a/src/lib/commands/sandbox/channels/common.ts b/src/lib/commands/sandbox/channels/common.ts index 884d748bab2..d31036783aa 100644 --- a/src/lib/commands/sandbox/channels/common.ts +++ b/src/lib/commands/sandbox/channels/common.ts @@ -54,6 +54,5 @@ export const channelMutationArgs = { }; export const channelMutationFlags = { - help: Flags.help({ char: "h" }), "dry-run": Flags.boolean({ description: "Preview the change without applying it" }), }; diff --git a/src/lib/commands/sandbox/channels/list.ts b/src/lib/commands/sandbox/channels/list.ts index 76eb74cf175..33ac658cfbc 100644 --- a/src/lib/commands/sandbox/channels/list.ts +++ b/src/lib/commands/sandbox/channels/list.ts @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Flags } from "@oclif/core"; import { NemoClawCommand } from "../../../cli/nemoclaw-oclif-command"; import { listSandboxChannels } from "../../../actions/sandbox/policy-channel"; @@ -18,7 +17,6 @@ export default class SandboxChannelsListCommand extends NemoClawCommand { sandboxName: sandboxNameArg, }; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/lib/commands/sandbox/config/get.ts b/src/lib/commands/sandbox/config/get.ts index f94388bf27e..9898502fcaf 100644 --- a/src/lib/commands/sandbox/config/get.ts +++ b/src/lib/commands/sandbox/config/get.ts @@ -22,7 +22,6 @@ export default class SandboxConfigGetCommand extends NemoClawCommand { sandboxName: sandboxNameArg, }; static flags = { - help: Flags.help({ char: "h" }), key: Flags.string({ description: "Dotpath to read from the sanitized config" }), format: Flags.string({ description: "Output format", diff --git a/src/lib/commands/sandbox/config/set.ts b/src/lib/commands/sandbox/config/set.ts index 830d0528f6d..55a870de646 100644 --- a/src/lib/commands/sandbox/config/set.ts +++ b/src/lib/commands/sandbox/config/set.ts @@ -27,7 +27,6 @@ export default class SandboxConfigSetCommand extends NemoClawCommand { sandboxName: sandboxNameArg, }; static flags = { - help: Flags.help({ char: "h" }), key: Flags.string({ description: "Dotpath to update in the config" }), value: Flags.string({ description: "Value to write; JSON values are parsed when possible" }), restart: Flags.boolean({ description: "Signal the sandbox agent process to reload after writing" }), diff --git a/src/lib/commands/sandbox/connect.ts b/src/lib/commands/sandbox/connect.ts index 76eb7e6d45f..aad97fb966b 100644 --- a/src/lib/commands/sandbox/connect.ts +++ b/src/lib/commands/sandbox/connect.ts @@ -21,7 +21,6 @@ export default class ConnectCliCommand extends NemoClawCommand { sandboxName: Args.string({ name: "sandbox", description: "Sandbox name", required: true }), }; static flags = { - help: Flags.help({ char: "h" }), "probe-only": Flags.boolean({ description: "Recover and check the sandbox without opening SSH" }), "dangerously-skip-permissions": Flags.boolean({ hidden: true }), }; diff --git a/src/lib/commands/sandbox/doctor.ts b/src/lib/commands/sandbox/doctor.ts index 914af1e47a9..ed9defa7c99 100644 --- a/src/lib/commands/sandbox/doctor.ts +++ b/src/lib/commands/sandbox/doctor.ts @@ -21,7 +21,6 @@ export default class SandboxDoctorCliCommand extends NemoClawCommand { }), }; static flags = { - help: Flags.help({ char: "h" }), json: Flags.boolean({ description: "Emit machine-readable JSON diagnostics" }), }; diff --git a/src/lib/commands/sandbox/hosts/common.ts b/src/lib/commands/sandbox/hosts/common.ts index c46fdf94bb3..62576d023c2 100644 --- a/src/lib/commands/sandbox/hosts/common.ts +++ b/src/lib/commands/sandbox/hosts/common.ts @@ -50,6 +50,5 @@ export const hostAliasAddArgs = { }; export const hostAliasMutationFlags = { - help: Flags.help({ char: "h" }), "dry-run": Flags.boolean({ description: "Preview the JSON patch without applying it" }), }; diff --git a/src/lib/commands/sandbox/hosts/list.ts b/src/lib/commands/sandbox/hosts/list.ts index e6aec22687a..3208978242d 100644 --- a/src/lib/commands/sandbox/hosts/list.ts +++ b/src/lib/commands/sandbox/hosts/list.ts @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Flags } from "@oclif/core"; import { NemoClawCommand } from "../../../cli/nemoclaw-oclif-command"; import { getHostsRuntimeBridge, hostAliasSandboxArgs } from "./common"; @@ -15,7 +14,6 @@ export default class HostsListCommand extends NemoClawCommand { static examples = ["<%= config.bin %> sandbox hosts list alpha"]; static args = hostAliasSandboxArgs; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/lib/commands/sandbox/logs.ts b/src/lib/commands/sandbox/logs.ts index ba984d9b4d4..f525ec9bee0 100644 --- a/src/lib/commands/sandbox/logs.ts +++ b/src/lib/commands/sandbox/logs.ts @@ -52,7 +52,6 @@ export default class SandboxLogsCommand extends NemoClawCommand { }), }; static flags = { - help: Flags.help({ char: "h" }), follow: Flags.boolean({ description: "Follow logs until interrupted" }), tail: Flags.integer({ char: "n", diff --git a/src/lib/commands/sandbox/policy/common.ts b/src/lib/commands/sandbox/policy/common.ts index de948b50e01..72b0a3f0575 100644 --- a/src/lib/commands/sandbox/policy/common.ts +++ b/src/lib/commands/sandbox/policy/common.ts @@ -50,7 +50,6 @@ export function appendCommonPolicyFlags( export const policyMutationArgs = { sandboxName: sandboxNameArg, preset: presetArg }; export const policyMutationFlags = { - help: Flags.help({ char: "h" }), yes: Flags.boolean({ char: "y", description: "Skip the confirmation prompt" }), force: Flags.boolean({ description: "Skip the confirmation prompt" }), "dry-run": Flags.boolean({ description: "Preview without applying" }), diff --git a/src/lib/commands/sandbox/policy/list.ts b/src/lib/commands/sandbox/policy/list.ts index b68fb7b1c49..ac41c088c37 100644 --- a/src/lib/commands/sandbox/policy/list.ts +++ b/src/lib/commands/sandbox/policy/list.ts @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Flags } from "@oclif/core"; import { NemoClawCommand } from "../../../cli/nemoclaw-oclif-command"; import { listSandboxPolicies } from "../../../actions/sandbox/policy-channel"; @@ -18,7 +17,6 @@ export default class SandboxPolicyListCommand extends NemoClawCommand { sandboxName: sandboxNameArg, }; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/lib/commands/sandbox/share.ts b/src/lib/commands/sandbox/share.ts index 6f808eb9d57..4cef668cacd 100644 --- a/src/lib/commands/sandbox/share.ts +++ b/src/lib/commands/sandbox/share.ts @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Flags } from "@oclif/core"; import { NemoClawCommand } from "../../cli/nemoclaw-oclif-command"; import { printShareUsageAndExit } from "../../share-command"; @@ -22,7 +21,6 @@ export default class ShareCommand extends NemoClawCommand { sandboxName: sandboxNameArg, }; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/lib/commands/sandbox/share/mount.ts b/src/lib/commands/sandbox/share/mount.ts index e00f4db57f2..b3ab243d2da 100644 --- a/src/lib/commands/sandbox/share/mount.ts +++ b/src/lib/commands/sandbox/share/mount.ts @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Args, Flags } from "@oclif/core"; +import { Args } from "@oclif/core"; import { NemoClawCommand } from "../../../cli/nemoclaw-oclif-command"; import { runShareMount } from "../../../share-command"; @@ -31,7 +31,6 @@ export default class ShareMountCommand extends NemoClawCommand { }), }; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/lib/commands/sandbox/share/status.ts b/src/lib/commands/sandbox/share/status.ts index 910dfbaecad..de1f6dea999 100644 --- a/src/lib/commands/sandbox/share/status.ts +++ b/src/lib/commands/sandbox/share/status.ts @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Args, Flags } from "@oclif/core"; +import { Args } from "@oclif/core"; import { NemoClawCommand } from "../../../cli/nemoclaw-oclif-command"; import { runShareStatus } from "../../../share-command"; @@ -26,7 +26,6 @@ export default class ShareStatusCommand extends NemoClawCommand { }), }; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/lib/commands/sandbox/share/unmount.ts b/src/lib/commands/sandbox/share/unmount.ts index 174cf7691ad..89d6293c3be 100644 --- a/src/lib/commands/sandbox/share/unmount.ts +++ b/src/lib/commands/sandbox/share/unmount.ts @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Args, Flags } from "@oclif/core"; +import { Args } from "@oclif/core"; import { NemoClawCommand } from "../../../cli/nemoclaw-oclif-command"; import { runShareUnmount } from "../../../share-command"; @@ -26,7 +26,6 @@ export default class ShareUnmountCommand extends NemoClawCommand { }), }; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/lib/commands/sandbox/shields/down.ts b/src/lib/commands/sandbox/shields/down.ts index 925036223fe..92d3c865565 100644 --- a/src/lib/commands/sandbox/shields/down.ts +++ b/src/lib/commands/sandbox/shields/down.ts @@ -17,7 +17,6 @@ export default class ShieldsDownCommand extends NemoClawCommand { static usage = [" [--timeout 5m] [--reason ] [--policy permissive]"]; static args = { sandboxName: sandboxNameArg }; static flags = { - help: Flags.help({ char: "h" }), timeout: shieldsTimeoutDurationFlag({ description: "Duration before shields are restored" }), reason: Flags.string({ description: "Reason for lowering shields" }), policy: Flags.string({ description: "Policy to apply while shields are down" }), diff --git a/src/lib/commands/sandbox/shields/status.ts b/src/lib/commands/sandbox/shields/status.ts index df6efa089be..902a3779cd2 100644 --- a/src/lib/commands/sandbox/shields/status.ts +++ b/src/lib/commands/sandbox/shields/status.ts @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Flags } from "@oclif/core"; import { NemoClawCommand } from "../../../cli/nemoclaw-oclif-command"; import * as shields from "../../../shields"; @@ -16,7 +15,6 @@ export default class ShieldsStatusCommand extends NemoClawCommand { static usage = [""]; static args = { sandboxName: sandboxNameArg }; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/lib/commands/sandbox/shields/up.ts b/src/lib/commands/sandbox/shields/up.ts index e3d8464f7ad..0333fb263b1 100644 --- a/src/lib/commands/sandbox/shields/up.ts +++ b/src/lib/commands/sandbox/shields/up.ts @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Flags } from "@oclif/core"; import { NemoClawCommand } from "../../../cli/nemoclaw-oclif-command"; import * as shields from "../../../shields"; @@ -16,7 +15,6 @@ export default class ShieldsUpCommand extends NemoClawCommand { static usage = [""]; static args = { sandboxName: sandboxNameArg }; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/lib/commands/sandbox/skill/install.ts b/src/lib/commands/sandbox/skill/install.ts index 10d8796941c..07fa15cb50c 100644 --- a/src/lib/commands/sandbox/skill/install.ts +++ b/src/lib/commands/sandbox/skill/install.ts @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Args, Flags } from "@oclif/core"; +import { Args } from "@oclif/core"; import { NemoClawCommand } from "../../../cli/nemoclaw-oclif-command"; import { getSkillInstallRuntimeBridge } from "./common"; @@ -29,7 +29,6 @@ export default class SkillInstallCliCommand extends NemoClawCommand { }), }; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/lib/commands/sandbox/snapshot/create.ts b/src/lib/commands/sandbox/snapshot/create.ts index 19c5091eda0..50aa4bf3013 100644 --- a/src/lib/commands/sandbox/snapshot/create.ts +++ b/src/lib/commands/sandbox/snapshot/create.ts @@ -20,7 +20,6 @@ export default class SnapshotCreateCommand extends NemoClawCommand { sandboxName: sandboxNameArg, }; static flags = { - help: Flags.help({ char: "h" }), name: Flags.string({ description: "Optional snapshot label" }), }; diff --git a/src/lib/commands/sandbox/snapshot/list.ts b/src/lib/commands/sandbox/snapshot/list.ts index e5f602df822..0fb2a723f88 100644 --- a/src/lib/commands/sandbox/snapshot/list.ts +++ b/src/lib/commands/sandbox/snapshot/list.ts @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Flags } from "@oclif/core"; import { NemoClawCommand } from "../../../cli/nemoclaw-oclif-command"; import { getSnapshotRuntimeBridge, sandboxNameArg } from "./common"; @@ -17,7 +16,6 @@ export default class SnapshotListCommand extends NemoClawCommand { sandboxName: sandboxNameArg, }; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/lib/commands/sandbox/snapshot/restore.ts b/src/lib/commands/sandbox/snapshot/restore.ts index 20dafa08afa..e216aaa0601 100644 --- a/src/lib/commands/sandbox/snapshot/restore.ts +++ b/src/lib/commands/sandbox/snapshot/restore.ts @@ -26,7 +26,6 @@ export default class SnapshotRestoreCommand extends NemoClawCommand { }), }; static flags = { - help: Flags.help({ char: "h" }), to: Flags.string({ description: "Restore into another sandbox" }), }; diff --git a/src/lib/commands/sandbox/status.ts b/src/lib/commands/sandbox/status.ts index aaa21c61bac..dd93c40ada8 100644 --- a/src/lib/commands/sandbox/status.ts +++ b/src/lib/commands/sandbox/status.ts @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Flags } from "@oclif/core"; import { NemoClawCommand } from "../../cli/nemoclaw-oclif-command"; import { showSandboxStatus } from "../../actions/sandbox/status"; @@ -18,7 +17,6 @@ export default class SandboxStatusCommand extends NemoClawCommand { sandboxName: sandboxNameArg, }; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/lib/commands/tunnel/start.ts b/src/lib/commands/tunnel/start.ts index bc5d1d4517d..8db431c0ab8 100644 --- a/src/lib/commands/tunnel/start.ts +++ b/src/lib/commands/tunnel/start.ts @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Flags } from "@oclif/core"; import { NemoClawCommand } from "../../cli/nemoclaw-oclif-command"; import { startAll } from "../../tunnel/services"; @@ -16,7 +15,6 @@ export default class TunnelStartCommand extends NemoClawCommand { static usage = ["tunnel start"]; static examples = ["<%= config.bin %> tunnel start"]; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/lib/commands/tunnel/stop.ts b/src/lib/commands/tunnel/stop.ts index cf02729f531..5f0ee529e09 100644 --- a/src/lib/commands/tunnel/stop.ts +++ b/src/lib/commands/tunnel/stop.ts @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Flags } from "@oclif/core"; import { NemoClawCommand } from "../../cli/nemoclaw-oclif-command"; import { stopAll } from "../../tunnel/services"; @@ -16,7 +15,6 @@ export default class TunnelStopCommand extends NemoClawCommand { static usage = ["tunnel stop"]; static examples = ["<%= config.bin %> tunnel stop"]; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/lib/commands/uninstall.ts b/src/lib/commands/uninstall.ts index b2d662bf58b..9dfe41c2e1f 100644 --- a/src/lib/commands/uninstall.ts +++ b/src/lib/commands/uninstall.ts @@ -3,7 +3,6 @@ import { spawnSync } from "node:child_process"; -import { Flags } from "@oclif/core"; import { NemoClawCommand } from "../cli/nemoclaw-oclif-command"; import { getVersion } from "../core/version"; @@ -17,7 +16,6 @@ export default class UninstallCliCommand extends NemoClawCommand { static usage = ["uninstall [flags]"]; static examples = ["<%= config.bin %> uninstall --yes"]; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise { diff --git a/src/lib/recover-cli-command.ts b/src/lib/recover-cli-command.ts index b974fc3a746..419c741e8b8 100644 --- a/src/lib/recover-cli-command.ts +++ b/src/lib/recover-cli-command.ts @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -import { Args, Flags } from "@oclif/core"; +import { Args } from "@oclif/core"; import { connectSandbox } from "./actions/sandbox/connect"; import { NemoClawCommand } from "./cli/nemoclaw-oclif-command"; @@ -18,7 +18,6 @@ export default class RecoverCliCommand extends NemoClawCommand { sandboxName: Args.string({ name: "sandbox", description: "Sandbox name", required: true }), }; static flags = { - help: Flags.help({ char: "h" }), }; public async run(): Promise {