Просмотр исходного кода

added descriptions to command index

Tim Jones 2 месяцев назад
Родитель
Сommit
c55e5f6da5
4 измененных файлов с 238 добавлено и 224 удалено
  1. 69 71
      CommandIndex.md
  2. 4 1
      Commands.md
  3. 69 70
      README.md
  4. 96 82
      generate_commands_markdown.sh

+ 69 - 71
CommandIndex.md

@@ -1,72 +1,70 @@
-# CLI Command Index
-
 - [rpk](Commands.md#rpk)
-  - [summary](Commands.md#rpk-summary)
-  - [servers](Commands.md#rpk-servers)
-    - [summary](Commands.md#rpk-servers-summary)
-    - [add](Commands.md#rpk-servers-add)
-    - [get](Commands.md#rpk-servers-get)
-    - [describe](Commands.md#rpk-servers-describe)
-    - [set](Commands.md#rpk-servers-set)
-    - [del](Commands.md#rpk-servers-del)
-    - [tree](Commands.md#rpk-servers-tree)
-    - [cpu](Commands.md#rpk-servers-cpu)
-      - [add](Commands.md#rpk-servers-cpu-add)
-      - [set](Commands.md#rpk-servers-cpu-set)
-      - [del](Commands.md#rpk-servers-cpu-del)
-    - [drive](Commands.md#rpk-servers-drive)
-      - [add](Commands.md#rpk-servers-drive-add)
-      - [set](Commands.md#rpk-servers-drive-set)
-      - [del](Commands.md#rpk-servers-drive-del)
-    - [gpu](Commands.md#rpk-servers-gpu)
-      - [add](Commands.md#rpk-servers-gpu-add)
-      - [set](Commands.md#rpk-servers-gpu-set)
-      - [del](Commands.md#rpk-servers-gpu-del)
-    - [nic](Commands.md#rpk-servers-nic)
-      - [add](Commands.md#rpk-servers-nic-add)
-      - [set](Commands.md#rpk-servers-nic-set)
-      - [del](Commands.md#rpk-servers-nic-del)
-  - [switches](Commands.md#rpk-switches)
-    - [summary](Commands.md#rpk-switches-summary)
-    - [add](Commands.md#rpk-switches-add)
-    - [list](Commands.md#rpk-switches-list)
-    - [get](Commands.md#rpk-switches-get)
-    - [describe](Commands.md#rpk-switches-describe)
-    - [set](Commands.md#rpk-switches-set)
-    - [del](Commands.md#rpk-switches-del)
-  - [systems](Commands.md#rpk-systems)
-    - [summary](Commands.md#rpk-systems-summary)
-    - [add](Commands.md#rpk-systems-add)
-    - [list](Commands.md#rpk-systems-list)
-    - [get](Commands.md#rpk-systems-get)
-    - [describe](Commands.md#rpk-systems-describe)
-    - [set](Commands.md#rpk-systems-set)
-    - [del](Commands.md#rpk-systems-del)
-    - [tree](Commands.md#rpk-systems-tree)
-  - [accesspoints](Commands.md#rpk-accesspoints)
-    - [summary](Commands.md#rpk-accesspoints-summary)
-    - [add](Commands.md#rpk-accesspoints-add)
-    - [list](Commands.md#rpk-accesspoints-list)
-    - [get](Commands.md#rpk-accesspoints-get)
-    - [describe](Commands.md#rpk-accesspoints-describe)
-    - [set](Commands.md#rpk-accesspoints-set)
-    - [del](Commands.md#rpk-accesspoints-del)
-  - [ups](Commands.md#rpk-ups)
-    - [summary](Commands.md#rpk-ups-summary)
-    - [add](Commands.md#rpk-ups-add)
-    - [list](Commands.md#rpk-ups-list)
-    - [get](Commands.md#rpk-ups-get)
-    - [describe](Commands.md#rpk-ups-describe)
-    - [set](Commands.md#rpk-ups-set)
-    - [del](Commands.md#rpk-ups-del)
-  - [desktops](Commands.md#rpk-desktops)
+  - [summary](Commands.md#rpk-summary) - Show a summarized report for all resources
+  - [servers](Commands.md#rpk-servers) - Manage servers
+    - [summary](Commands.md#rpk-servers-summary) - Show a summarized hardware report for all servers
+    - [add](Commands.md#rpk-servers-add) - Add a new server
+    - [get](Commands.md#rpk-servers-get) - List servers or get a server by name
+    - [describe](Commands.md#rpk-servers-describe) - Show detailed information about a server
+    - [set](Commands.md#rpk-servers-set) - Update server properties
+    - [del](Commands.md#rpk-servers-del) - Delete a server
+    - [tree](Commands.md#rpk-servers-tree) - Displays a dependency tree for the server
+    - [cpu](Commands.md#rpk-servers-cpu) - Manage server CPUs
+      - [add](Commands.md#rpk-servers-cpu-add) - Add a CPU to a server
+      - [set](Commands.md#rpk-servers-cpu-set) - Update a CPU on a server
+      - [del](Commands.md#rpk-servers-cpu-del) - Remove a CPU from a server
+    - [drive](Commands.md#rpk-servers-drive) - Manage server drives
+      - [add](Commands.md#rpk-servers-drive-add) - Add a drive to a server
+      - [set](Commands.md#rpk-servers-drive-set) - Update a drive on a server
+      - [del](Commands.md#rpk-servers-drive-del) - Remove a drive from a server
+    - [gpu](Commands.md#rpk-servers-gpu) - Manage server GPUs
+      - [add](Commands.md#rpk-servers-gpu-add) - Add a GPU to a server
+      - [set](Commands.md#rpk-servers-gpu-set) - Update a GPU on a server
+      - [del](Commands.md#rpk-servers-gpu-del) - Remove a GPU from a server
+    - [nic](Commands.md#rpk-servers-nic) - Manage server NICs
+      - [add](Commands.md#rpk-servers-nic-add) - Add a NIC to a server
+      - [set](Commands.md#rpk-servers-nic-set) - Update a NIC on a server
+      - [del](Commands.md#rpk-servers-nic-del) - Remove a NIC from a server
+  - [switches](Commands.md#rpk-switches) - Manage switches
+    - [summary](Commands.md#rpk-switches-summary) - Show switch hardware report
+    - [add](Commands.md#rpk-switches-add) - Add a new switch
+    - [list](Commands.md#rpk-switches-list) - List switches
+    - [get](Commands.md#rpk-switches-get) - Get a switches by name
+    - [describe](Commands.md#rpk-switches-describe) - Show detailed information about a switch
+    - [set](Commands.md#rpk-switches-set) - Update switch properties
+    - [del](Commands.md#rpk-switches-del) - Delete a switch
+  - [systems](Commands.md#rpk-systems) - Manage systems
+    - [summary](Commands.md#rpk-systems-summary) - Show system report
+    - [add](Commands.md#rpk-systems-add) - Add a new system
+    - [list](Commands.md#rpk-systems-list) - List systems
+    - [get](Commands.md#rpk-systems-get) - Get a system by name
+    - [describe](Commands.md#rpk-systems-describe) - Show detailed information about a system
+    - [set](Commands.md#rpk-systems-set) - Update system properties
+    - [del](Commands.md#rpk-systems-del) - Delete a system
+    - [tree](Commands.md#rpk-systems-tree) - Displays a dependency tree for the system
+  - [accesspoints](Commands.md#rpk-accesspoints) - Manage access points
+    - [summary](Commands.md#rpk-accesspoints-summary) - Show access point hardware report
+    - [add](Commands.md#rpk-accesspoints-add) - Add a new access point
+    - [list](Commands.md#rpk-accesspoints-list) - List access points
+    - [get](Commands.md#rpk-accesspoints-get) - Get an access point by name
+    - [describe](Commands.md#rpk-accesspoints-describe) - Show detailed information about an access point
+    - [set](Commands.md#rpk-accesspoints-set) - Update access point properties
+    - [del](Commands.md#rpk-accesspoints-del) - Delete an access point
+  - [ups](Commands.md#rpk-ups) - Manage UPS units
+    - [summary](Commands.md#rpk-ups-summary) - Show UPS hardware report
+    - [add](Commands.md#rpk-ups-add) - Add a new UPS
+    - [list](Commands.md#rpk-ups-list) - List UPS units
+    - [get](Commands.md#rpk-ups-get) - Get a UPS by name
+    - [describe](Commands.md#rpk-ups-describe) - Show detailed information about a UPS
+    - [set](Commands.md#rpk-ups-set) - Update UPS properties
+    - [del](Commands.md#rpk-ups-del) - Delete a UPS
+  - [desktops](Commands.md#rpk-desktops) - Manage Desktops
     - [add](Commands.md#rpk-desktops-add)
     - [list](Commands.md#rpk-desktops-list)
     - [get](Commands.md#rpk-desktops-get)
     - [describe](Commands.md#rpk-desktops-describe)
     - [set](Commands.md#rpk-desktops-set)
     - [del](Commands.md#rpk-desktops-del)
-    - [summary](Commands.md#rpk-desktops-summary)
+    - [summary](Commands.md#rpk-desktops-summary) - Show desktop hardware report
     - [tree](Commands.md#rpk-desktops-tree)
     - [cpu](Commands.md#rpk-desktops-cpu)
       - [add](Commands.md#rpk-desktops-cpu-add)
@@ -84,12 +82,12 @@
       - [add](Commands.md#rpk-desktops-nic-add)
       - [set](Commands.md#rpk-desktops-nic-set)
       - [del](Commands.md#rpk-desktops-nic-del)
-  - [services](Commands.md#rpk-services)
-    - [summary](Commands.md#rpk-services-summary)
-    - [add](Commands.md#rpk-services-add)
-    - [list](Commands.md#rpk-services-list)
-    - [get](Commands.md#rpk-services-get)
-    - [describe](Commands.md#rpk-services-describe)
-    - [set](Commands.md#rpk-services-set)
-    - [del](Commands.md#rpk-services-del)
-    - [subnets](Commands.md#rpk-services-subnets)
+  - [services](Commands.md#rpk-services) - Manage services
+    - [summary](Commands.md#rpk-services-summary) - Show service summary report
+    - [add](Commands.md#rpk-services-add) - Add a new service
+    - [list](Commands.md#rpk-services-list) - List all services
+    - [get](Commands.md#rpk-services-get) - Get a service by name
+    - [describe](Commands.md#rpk-services-describe) - Show detailed information about a service
+    - [set](Commands.md#rpk-services-set) - Update service properties
+    - [del](Commands.md#rpk-services-del) - Delete a service
+    - [subnets](Commands.md#rpk-services-subnets) - List service subnets or filter by CIDR

+ 4 - 1
Commands.md

@@ -15,7 +15,7 @@ COMMANDS:
     systems         Manage systems                            
     accesspoints    Manage access points                      
     ups             Manage UPS units                          
-    desktops                                                  
+    desktops        Manage Desktops                           
     services        Manage services                           
 ```
 
@@ -946,6 +946,9 @@ OPTIONS:
 
 ## `rpk desktops`
 ```
+DESCRIPTION:
+Manage Desktops
+
 USAGE:
     rpk desktops [OPTIONS] <COMMAND>
 

+ 69 - 70
README.md

@@ -54,74 +54,73 @@ The project is optimized for home labs and self-hosted environments, not enterpr
 ```
 
 ## Command Tree
-
 - [rpk](Commands.md#rpk)
-  - [summary](Commands.md#rpk-summary)
-  - [servers](Commands.md#rpk-servers)
-    - [summary](Commands.md#rpk-servers-summary)
-    - [add](Commands.md#rpk-servers-add)
-    - [get](Commands.md#rpk-servers-get)
-    - [describe](Commands.md#rpk-servers-describe)
-    - [set](Commands.md#rpk-servers-set)
-    - [del](Commands.md#rpk-servers-del)
-    - [tree](Commands.md#rpk-servers-tree)
-    - [cpu](Commands.md#rpk-servers-cpu)
-      - [add](Commands.md#rpk-servers-cpu-add)
-      - [set](Commands.md#rpk-servers-cpu-set)
-      - [del](Commands.md#rpk-servers-cpu-del)
-    - [drive](Commands.md#rpk-servers-drive)
-      - [add](Commands.md#rpk-servers-drive-add)
-      - [set](Commands.md#rpk-servers-drive-set)
-      - [del](Commands.md#rpk-servers-drive-del)
-    - [gpu](Commands.md#rpk-servers-gpu)
-      - [add](Commands.md#rpk-servers-gpu-add)
-      - [set](Commands.md#rpk-servers-gpu-set)
-      - [del](Commands.md#rpk-servers-gpu-del)
-    - [nic](Commands.md#rpk-servers-nic)
-      - [add](Commands.md#rpk-servers-nic-add)
-      - [set](Commands.md#rpk-servers-nic-set)
-      - [del](Commands.md#rpk-servers-nic-del)
-  - [switches](Commands.md#rpk-switches)
-    - [summary](Commands.md#rpk-switches-summary)
-    - [add](Commands.md#rpk-switches-add)
-    - [list](Commands.md#rpk-switches-list)
-    - [get](Commands.md#rpk-switches-get)
-    - [describe](Commands.md#rpk-switches-describe)
-    - [set](Commands.md#rpk-switches-set)
-    - [del](Commands.md#rpk-switches-del)
-  - [systems](Commands.md#rpk-systems)
-    - [summary](Commands.md#rpk-systems-summary)
-    - [add](Commands.md#rpk-systems-add)
-    - [list](Commands.md#rpk-systems-list)
-    - [get](Commands.md#rpk-systems-get)
-    - [describe](Commands.md#rpk-systems-describe)
-    - [set](Commands.md#rpk-systems-set)
-    - [del](Commands.md#rpk-systems-del)
-    - [tree](Commands.md#rpk-systems-tree)
-  - [accesspoints](Commands.md#rpk-accesspoints)
-    - [summary](Commands.md#rpk-accesspoints-summary)
-    - [add](Commands.md#rpk-accesspoints-add)
-    - [list](Commands.md#rpk-accesspoints-list)
-    - [get](Commands.md#rpk-accesspoints-get)
-    - [describe](Commands.md#rpk-accesspoints-describe)
-    - [set](Commands.md#rpk-accesspoints-set)
-    - [del](Commands.md#rpk-accesspoints-del)
-  - [ups](Commands.md#rpk-ups)
-    - [summary](Commands.md#rpk-ups-summary)
-    - [add](Commands.md#rpk-ups-add)
-    - [list](Commands.md#rpk-ups-list)
-    - [get](Commands.md#rpk-ups-get)
-    - [describe](Commands.md#rpk-ups-describe)
-    - [set](Commands.md#rpk-ups-set)
-    - [del](Commands.md#rpk-ups-del)
-  - [desktops](Commands.md#rpk-desktops)
+  - [summary](Commands.md#rpk-summary) - Show a summarized report for all resources
+  - [servers](Commands.md#rpk-servers) - Manage servers
+    - [summary](Commands.md#rpk-servers-summary) - Show a summarized hardware report for all servers
+    - [add](Commands.md#rpk-servers-add) - Add a new server
+    - [get](Commands.md#rpk-servers-get) - List servers or get a server by name
+    - [describe](Commands.md#rpk-servers-describe) - Show detailed information about a server
+    - [set](Commands.md#rpk-servers-set) - Update server properties
+    - [del](Commands.md#rpk-servers-del) - Delete a server
+    - [tree](Commands.md#rpk-servers-tree) - Displays a dependency tree for the server
+    - [cpu](Commands.md#rpk-servers-cpu) - Manage server CPUs
+      - [add](Commands.md#rpk-servers-cpu-add) - Add a CPU to a server
+      - [set](Commands.md#rpk-servers-cpu-set) - Update a CPU on a server
+      - [del](Commands.md#rpk-servers-cpu-del) - Remove a CPU from a server
+    - [drive](Commands.md#rpk-servers-drive) - Manage server drives
+      - [add](Commands.md#rpk-servers-drive-add) - Add a drive to a server
+      - [set](Commands.md#rpk-servers-drive-set) - Update a drive on a server
+      - [del](Commands.md#rpk-servers-drive-del) - Remove a drive from a server
+    - [gpu](Commands.md#rpk-servers-gpu) - Manage server GPUs
+      - [add](Commands.md#rpk-servers-gpu-add) - Add a GPU to a server
+      - [set](Commands.md#rpk-servers-gpu-set) - Update a GPU on a server
+      - [del](Commands.md#rpk-servers-gpu-del) - Remove a GPU from a server
+    - [nic](Commands.md#rpk-servers-nic) - Manage server NICs
+      - [add](Commands.md#rpk-servers-nic-add) - Add a NIC to a server
+      - [set](Commands.md#rpk-servers-nic-set) - Update a NIC on a server
+      - [del](Commands.md#rpk-servers-nic-del) - Remove a NIC from a server
+  - [switches](Commands.md#rpk-switches) - Manage switches
+    - [summary](Commands.md#rpk-switches-summary) - Show switch hardware report
+    - [add](Commands.md#rpk-switches-add) - Add a new switch
+    - [list](Commands.md#rpk-switches-list) - List switches
+    - [get](Commands.md#rpk-switches-get) - Get a switches by name
+    - [describe](Commands.md#rpk-switches-describe) - Show detailed information about a switch
+    - [set](Commands.md#rpk-switches-set) - Update switch properties
+    - [del](Commands.md#rpk-switches-del) - Delete a switch
+  - [systems](Commands.md#rpk-systems) - Manage systems
+    - [summary](Commands.md#rpk-systems-summary) - Show system report
+    - [add](Commands.md#rpk-systems-add) - Add a new system
+    - [list](Commands.md#rpk-systems-list) - List systems
+    - [get](Commands.md#rpk-systems-get) - Get a system by name
+    - [describe](Commands.md#rpk-systems-describe) - Show detailed information about a system
+    - [set](Commands.md#rpk-systems-set) - Update system properties
+    - [del](Commands.md#rpk-systems-del) - Delete a system
+    - [tree](Commands.md#rpk-systems-tree) - Displays a dependency tree for the system
+  - [accesspoints](Commands.md#rpk-accesspoints) - Manage access points
+    - [summary](Commands.md#rpk-accesspoints-summary) - Show access point hardware report
+    - [add](Commands.md#rpk-accesspoints-add) - Add a new access point
+    - [list](Commands.md#rpk-accesspoints-list) - List access points
+    - [get](Commands.md#rpk-accesspoints-get) - Get an access point by name
+    - [describe](Commands.md#rpk-accesspoints-describe) - Show detailed information about an access point
+    - [set](Commands.md#rpk-accesspoints-set) - Update access point properties
+    - [del](Commands.md#rpk-accesspoints-del) - Delete an access point
+  - [ups](Commands.md#rpk-ups) - Manage UPS units
+    - [summary](Commands.md#rpk-ups-summary) - Show UPS hardware report
+    - [add](Commands.md#rpk-ups-add) - Add a new UPS
+    - [list](Commands.md#rpk-ups-list) - List UPS units
+    - [get](Commands.md#rpk-ups-get) - Get a UPS by name
+    - [describe](Commands.md#rpk-ups-describe) - Show detailed information about a UPS
+    - [set](Commands.md#rpk-ups-set) - Update UPS properties
+    - [del](Commands.md#rpk-ups-del) - Delete a UPS
+  - [desktops](Commands.md#rpk-desktops) - Manage Desktops
     - [add](Commands.md#rpk-desktops-add)
     - [list](Commands.md#rpk-desktops-list)
     - [get](Commands.md#rpk-desktops-get)
     - [describe](Commands.md#rpk-desktops-describe)
     - [set](Commands.md#rpk-desktops-set)
     - [del](Commands.md#rpk-desktops-del)
-    - [summary](Commands.md#rpk-desktops-summary)
+    - [summary](Commands.md#rpk-desktops-summary) - Show desktop hardware report
     - [tree](Commands.md#rpk-desktops-tree)
     - [cpu](Commands.md#rpk-desktops-cpu)
       - [add](Commands.md#rpk-desktops-cpu-add)
@@ -139,12 +138,12 @@ The project is optimized for home labs and self-hosted environments, not enterpr
       - [add](Commands.md#rpk-desktops-nic-add)
       - [set](Commands.md#rpk-desktops-nic-set)
       - [del](Commands.md#rpk-desktops-nic-del)
-  - [services](Commands.md#rpk-services)
-    - [summary](Commands.md#rpk-services-summary)
-    - [add](Commands.md#rpk-services-add)
-    - [list](Commands.md#rpk-services-list)
-    - [get](Commands.md#rpk-services-get)
-    - [describe](Commands.md#rpk-services-describe)
-    - [set](Commands.md#rpk-services-set)
-    - [del](Commands.md#rpk-services-del)
-    - [subnets](Commands.md#rpk-services-subnets)
+  - [services](Commands.md#rpk-services) - Manage services
+    - [summary](Commands.md#rpk-services-summary) - Show service summary report
+    - [add](Commands.md#rpk-services-add) - Add a new service
+    - [list](Commands.md#rpk-services-list) - List all services
+    - [get](Commands.md#rpk-services-get) - Get a service by name
+    - [describe](Commands.md#rpk-services-describe) - Show detailed information about a service
+    - [set](Commands.md#rpk-services-set) - Update service properties
+    - [del](Commands.md#rpk-services-del) - Delete a service
+    - [subnets](Commands.md#rpk-services-subnets) - List service subnets or filter by CIDR

+ 96 - 82
generate_commands_markdown.sh

@@ -5,11 +5,9 @@ PROJECT_PATH="."
 OUTPUT_FILE="COMMANDS.md"
 declare -A VISITED
 
-# Create temp files for the Tree structure and the Body content
 TREE_TEMP=$(mktemp)
 BODY_TEMP=$(mktemp)
 
-# Ensure temp files are cleaned up when script exits
 trap 'rm -f "$TREE_TEMP" "$BODY_TEMP"' EXIT
 
 # ----------------------------
@@ -29,45 +27,65 @@ run_help() {
 
   if [[ ! -x "$exe" ]]; then
     echo "Publishing RackPeek ($config)..." >&2
-    if ! dotnet publish "$project" \
-        -c "$config" \
-        -r "$runtime" \
-        --self-contained false \
-        -p:PublishSingleFile=true; then
-      echo "ERROR: dotnet publish failed" >&2
-      return 1
-    fi
+    dotnet publish "$project" -c "$config" -r "$runtime" --self-contained false -p:PublishSingleFile=true >&2
   fi
 
-  echo "Running: $exe $*" >&2
-
   local output
-  if ! output=$("$exe" "$@" 2>&1 | strip_colors); then
-    echo "WARNING: command failed: $exe $*" >&2
-    echo "$output" >&2
-    return 1
-  fi
-
+  output=$("$exe" "$@" 2>&1 | strip_colors)
   echo "$output"
 }
 
+# UPDATED: Handles descriptions that start on the next line
+get_description() {
+  local help_output="$1"
+  echo "$help_output" | awk '
+    # If we find the header...
+    /^DESCRIPTION:/ {
+      in_desc = 1
+      # Remove the header itself
+      sub(/^DESCRIPTION:[[:space:]]*/, "")
+      
+      # If there is text on this same line, print it and quit
+      if (length($0) > 0) {
+        print $0
+        exit
+      }
+      next
+    }
 
+    # If we are inside the description block...
+    in_desc {
+      # Stop if we hit an empty line or the next Section (UPPERCASE:)
+      if (/^[[:space:]]*$/) exit
+      if (/^[A-Z]+:/) exit
+
+      # Trim leading/trailing whitespace
+      gsub(/^[[:space:]]+|[[:space:]]+$/, "")
+      
+      # Print the line (we only take the first non-empty line for the index)
+      print $0
+      exit
+    }
+  '
+}
 
-get_commands() {
+# UPDATED: Handles "add <name>" correctly by taking only the first column ($1)
+get_child_commands() {
   local help_output="$1"
-
+  
   echo "$help_output" | awk '
     BEGIN { in_commands = 0 }
-
     /^COMMANDS:/ { in_commands = 1; next }
-
+    
     in_commands {
-      if ($0 ~ /^[[:space:]]{4}[a-zA-Z0-9-]+[[:space:]]+/) {
+      # Stop if we hit an empty line or a new section
+      if ($0 ~ /^[[:space:]]*$/) exit;
+      if ($0 ~ /^[A-Z]+:/) exit;
+
+      # Match lines that look like commands (indented)
+      if ($0 ~ /^[[:space:]]+[a-zA-Z0-9-]+/) {
+        # Print only the first word (the command name)
         print $1
-        next
-      }
-      if ($0 !~ /^[[:space:]]*$/) {
-        exit
       }
     }
   '
@@ -78,58 +96,53 @@ get_commands() {
 # ----------------------------
 
 generate_help_recursive() {
-  local current_path=("$@")
+  local path_string="$1"
   
-  local flat_cmd="${current_path[*]}"
-  local map_key="${flat_cmd:-root}"
-
-  # --- TREE GENERATION LOGIC ---
-  # 1. Calculate depth for indentation (2 spaces per level)
-  local depth=${#current_path[@]}
-  local indent=""
-  if [[ $depth -gt 0 ]]; then
-    printf -v indent "%*s" $((depth * 2)) ""
-  fi
-
-  # 2. Determine the display label for the tree (Leaf name only)
-  local tree_label
-  if [[ $depth -eq 0 ]]; then
-    tree_label="rpk"
-  else
-    tree_label="${current_path[-1]}" # Last element of array
+  # Convert string to array for the run_help command
+  local current_cmd_array=()
+  if [[ -n "$path_string" ]]; then
+    IFS=' ' read -r -a current_cmd_array <<< "$path_string"
   fi
 
-  # 3. Create a clean anchor link for Markdown (lowercase, replace spaces with dashes)
-  #    e.g., "rpk switches list" -> "#rpk-switches-list"
-  local anchor_text="rpk $flat_cmd"
-  # Trim leading space if flat_cmd was empty
-  anchor_text="${anchor_text% }" 
-  local anchor_link
-  anchor_link=$(echo "$anchor_text" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
-
-  # 4. Append to Tree Temp File
-  echo "${indent}- [${tree_label}](Commands.md#${anchor_link})" >> "$TREE_TEMP"
-  # -----------------------------
-
-  if [[ -n "${VISITED["$map_key"]:-}" ]]; then
-    return
-  fi
+  local map_key="${path_string:-root}"
+  
+  if [[ -n "${VISITED["$map_key"]:-}" ]]; then return; fi
   VISITED["$map_key"]=1
 
+  # 1. Run Help
   local help_output
-  if ! help_output=$(run_help "${current_path[@]}" --help); then
+  if ! help_output=$(run_help "${current_cmd_array[@]}" --help); then
     echo "Skipping: $map_key (help failed)" >&2
     return
   fi
 
-  # --- BODY GENERATION ---
-  # Determine header title
-  local display_header
-  if [[ -z "$flat_cmd" ]]; then
-    display_header="rpk"
-  else
-    display_header="rpk $flat_cmd"
+  # 2. Extract Description
+  local description
+  description=$(get_description "$help_output")
+  
+  # 3. Build Tree Entry
+  local depth=${#current_cmd_array[@]}
+  local indent=""
+  [[ $depth -gt 0 ]] && printf -v indent "%*s" $((depth * 2)) ""
+  
+  local tree_label
+  [[ $depth -eq 0 ]] && tree_label="rpk" || tree_label="${current_cmd_array[-1]}"
+
+  local anchor_text="rpk $path_string"
+  anchor_text="${anchor_text% }" 
+  local anchor_link=$(echo "$anchor_text" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
+
+  # Format: - [label](link) - Description
+  local tree_entry="${indent}- [${tree_label}](Commands.md#${anchor_link})"
+  if [[ -n "$description" ]]; then
+    tree_entry="${tree_entry} - ${description}"
   fi
+  
+  echo "$tree_entry" >> "$TREE_TEMP"
+
+  # 4. Write Body
+  local display_header
+  [[ -z "$path_string" ]] && display_header="rpk" || display_header="rpk $path_string"
 
   {
     echo "## \`${display_header}\`"
@@ -138,14 +151,20 @@ generate_help_recursive() {
     echo '```'
     echo ""
   } >> "$BODY_TEMP"
-  # -----------------------
-
-  local commands
-  mapfile -t commands < <(get_commands "$help_output")
 
-  for cmd in "${commands[@]}"; do
-    echo "Recursing into: ${display_header} ${cmd}" >&2
-    generate_help_recursive "${current_path[@]}" "$cmd"
+  # 5. Recurse
+  local child_cmds
+  mapfile -t child_cmds < <(get_child_commands "$help_output")
+
+  for child in "${child_cmds[@]}"; do
+    echo "Recursing into: ${display_header} ${child}" >&2
+    local next_path
+    if [[ -z "$path_string" ]]; then
+      next_path="$child"
+    else
+      next_path="$path_string $child"
+    fi
+    generate_help_recursive "$next_path"
   done
 }
 
@@ -155,22 +174,17 @@ generate_help_recursive() {
 
 echo "Generating documentation..."
 
-# Start recursion
-generate_help_recursive
+generate_help_recursive ""
 
-# Write command index
 {
-  echo "# CLI Command Index"
   echo ""
   cat "$TREE_TEMP"
 } > "CommandIndex.md"
 
-# Write full command documentation
 {
   echo "# CLI Commands"
   echo ""
   cat "$BODY_TEMP"
 } > "Commands.md"
 
-
-echo "Generated $OUTPUT_FILE successfully."
+echo "Generated Successfully."