Last updated: 2024-09-27 10:47:19.420995 File source: link on GitLab
The Nunet Command-Line Interface (CLI) serves as a powerful tool for interacting with the Nunet ecosystem, enabling you to manage network configurations, control capabilities, and handle cryptographic keys. It provides a comprehensive set of commands to streamline various tasks and operations within the Nunet network.
This command provides a suite of operations tailored for interacting with the Nunet Actor System. It enables you to communicate with actors within the network, facilitating actions like sending messages, invoking specific behaviors, and broadcasting information to multiple actors simultaneously.
Detailed documentation can be found here.
This command focuses on capability management within the Nunet ecosystem. It allows you to define, delegate, and control the permissions and authorizations granted to different entities, ensuring secure and controlled interactions within the network.
Detailed documentation can be found here.
The config command allows to interact with and manage your configuration file directly from the command line. This allows you to view existing settings, modify them as needed, and ensure Nunet DMS is tailored to your preferences.
edit
: Opens the configuration file in your default text editor for manual adjustments.
get
: Retrieve and display the current value associated with a specific configuration key.
set
: Modify the configuration file by assigning a new value to a specified key.
-h, --help
: Display help information for the config
command and its subcommands.
The Nunet Key Management CLI allows generating new keypairs and retrieve the Decentralized Identifier (DID) associated with a specific key.
nunet key
Description: The primary command to manage keys within the Nunet DMS
Usage: nunet key COMMAND
Available Commands:
did
: Retrieve the DID for a specified key
new
: Generate a new keypair
Flags:
-h, --help
: Display help information for the main key
command.
nunet key did
Description: Retrieves and displays the DID associated with a specified key. This DID uniquely identifies the key within the Nunet network.
Usage: nunet key did <key-name> [flags]
Arguments:
<key-name>
: The name of the key for which the DID is to be retrieved
Flags:
-h, --help
: Display help information for the did
command
nunet key new
Description: Generates a new keypair and securely stores the private key in the user's local keystore. The corresponding public key can be used for various cryptographic operations within the Nunet DMS
Usage: nunet key new <name> [flags]
Arguments:
<name>
: A name to identify the newly generated keypair
Flags:
-h, --help
: Display help information for the new
command.
Important Considerations:
Keep your private keys secure, as they provide access to your identity and associated capabilities within the Nunet DMS
Choose descriptive names for your keypairs to easily identify their purpose or associated devices.
Starts the Nunet Device Management Service (DMS) process, responsible for handling network operations and device management.
Usage:
Flags:
-c, --context string
: Specifies the key and capability context to use (default: "dms").
-h, --help
: Displays help information for the run
command.
Example:
This starts the Nunet DMS with the default "dms" context.
nunet tap
Purpose: Creates a TAP (network tap) interface to bridge the host network with a virtual machine (VM). It also configures network settings like IP forwarding and iptables rules.
Key Points:
Root Privileges Required: This command necessitates root or administrator privileges for execution due to its manipulation of network interfaces and system-level settings.
Usage:
Arguments:
main_interface
: (e.g., eth0) The name of the existing network interface on your host machine that you want to bridge with the TAP interface.
vm_interface
: (e.g., tap0) The name you want to assign to the newly created TAP interface.
CIDR
: (e.g., 172.16.0.1/24) The Classless Inter-Domain Routing (CIDR) notation specifying the IP address range and subnet mask for the TAP interface. This ensures that the VM or container connected to the TAP has its own IP address within the specified network.
Flags:
-h, --help
: Displays help information for the tap
command.
Example:
This command will create a TAP interface named 'tap0' bridged to your host's 'eth0' interface. The 'tap0' interface will be assigned an IP address of '172.16.0.1' with a subnet mask of '/24'. This configuration allows a VM connected to 'tap0' to access the network through your host's 'eth0' interface.
Important Notes:
Ensure you have the necessary permissions to execute this command.
Be cautious when configuring network settings, as incorrect configurations can disrupt your network connectivity.
Last updated: 2024-09-27 10:47:20.001380 File source: link on GitLab
The Nunet Capability Management CLI provides commands to manage capabilities within the Nunet ecosystem. Capabilities define the permissions and authorizations granted to different entities within the system. These commands allow you to create, modify, delegate, and list capabilities.
nunet cap anchor
: Add or modify capability anchors in a capability context.
nunet cap delegate
: Delegate capabilities for a subject.
nunet cap grant
: Grant (delegate) capabilities as anchors and side chains from a capability context.
nunet cap list
: List all capability anchors in a capability context
nunet cap new
: Create a new persistent capability context for DMS or personal usage
nunet cap remove
: Remove capability anchors in a capability context.
nunet cap anchor
This command is used to add new or modify existing capability anchors within a specific capability context. Anchors serve as the foundation for defining capabilities, establishing the core permissions and restrictions
Usage
Flags
-c, --context string
: Specifies the operation context, defining the key and capability context to use (defaults to "user").
-h, --help
: Displays help information for the anchor
command
--provide string
: Adds tokens as a "provide" anchor in JSON format, defining capabilities the context can offer
--require string
: Adds tokens as a "require" anchor in JSON format, defining capabilities the context demands
--root string
: Adds a DID as a "root" anchor, establishing the root authority for the context
nunet cap delegate
This command delegates specific capabilities to a subject, granting them permissions within the system
Usage
Arguments
<subjectDID>
: The Decentralized Identifier (DID) of the entity receiving the delegated capabilities
Flags
-a, --audience string
: (Optional) Specifies the audience DID, restricting the delegation to a specific recipient
--cap strings
: Defines the capabilities to be granted or delegated (can be specified multiple times)
-c, --context string
: Specifies the operation context (defaults to "user")
-d, --depth uint
: (Optional) Sets the delegation depth, controlling how many times the capabilities can be further delegated (default 0)
--duration duration
: Sets the duration for which the delegation is valid
-e, --expiry time
: Sets an expiration time for the delegation
-h, --help
: Displays help information for the delegate
command
--self-sign string
: Specifies self-signing options: 'no' (default), 'also', or 'only'
-t, --topic strings
: Defines the topics for which capabilities are granted or delegated (can be specified multiple times)
nunet cap grant
This command grants (delegates) capabilities as anchors and side chains from a specified capability context
Usage
Arguments
<subjectDID>
: The Decentralized Identifier (DID) of the entity receiving the granted capabilities
Flags
-a, --audience string
: (Optional) Specifies the audience DID
--cap strings
: Defines the capabilities to be granted or delegated
-c, --context string
: Specifies the operation context (defaults to "user")
-d, --depth uint
: (Optional) Sets the delegation depth
--duration duration
: Sets the duration for which the grant is valid
-e, --expiry time
: Sets an expiration time for the grant
-h, --help
: Displays help information for the grant
command
-t, --topic strings
: Defines the topics for which capabilities are granted
nunet cap list
This command lists all capability anchors within a specified capability context
Usage
Flags
-c, --context string
: Specifies the operation context (defaults to "user")
-h, --help
: Displays help information for the list
command
nunet cap new
This command creates a new persistent capability context, which can be used for DMS or personal purposes
Usage
Arguments
<name>
: The name for the new capability context
Flags
-h, --help
: Displays help information for the new
command
nunet cap remove
This command removes capability anchors from a specified capability context
Usage
Flags
-c, --context string
: Specifies the operation context (defaults to "user")
-h, --help
: Displays help information for the remove
command
--provide string
: Removes tokens from the "provide" anchor in JSON format
--require string
: Removes tokens from the "require" anchor in JSON format
--root string
: Removes a DID from the "root" anchor
Last updated: 2024-09-27 10:47:19.607035 File source: link on GitLab
The Nunet Actor System CLI provides a set of commands for interacting with the Nunet actor system, enabling you to send messages to actors, invoke behaviors, and broadcast messages across the network.
nunet actor msg
: Constructs a message for an actor.
nunet actor send
: Sends a constructed message to an actor.
nunet actor invoke
: Invokes a behavior in an actor and returns the result.
nunet actor broadcast
: Broadcasts a message to a topic, potentially reaching multiple actors.
nunet actor cmd
: Invokes a predefined public behavior on an actor.
nunet actor msg
This command is used to create a message that can be sent to an actor. It encapsulates the behavior to be invoked and the associated payload data.
Usage
Arguments
<behavior>
: The specific behavior you want the actor to perform upon receiving the message
<payload>
: The data accompanying the message, providing context or input for the behavior
Flags
-b, --broadcast string
: Designates the topic for broadcasting the message.
-c, --context string
: Specifies the capability context name
-d, --dest string
: Identifies the destination handle for the message.
-e, --expiry time
: Sets an expiration time for the message.
-h, --help
: Displays help information for the msg
command.
-i, --invoke
: Marks the message as an invocation, requesting a response from the actor.
-t, --timeout duration
: Sets a timeout for awaiting a response after invoking a behavior.
nunet actor send
This command delivers a previously constructed message to an actor.
Usage
Arguments
<msg>
: The message, created using the nunet actor msg
command, to be sent.
Flags
-h, --help
: Displays help information for the send
command.
nunet actor invoke
This command directly invokes a specific behavior on an actor and expects a response.
Usage
Arguments
<msg>
: The message, crafted with nunet actor msg
, containing the behavior and payload
Flags
-h, --help
: Displays help information for the invoke
command
nunet actor broadcast
This command disseminates a message to a designated topic, potentially reaching multiple actors who have subscribed to that topic.
Usage
Arguments
<msg>
: The message to be broadcasted
Flags
-h, --help
: Displays help information for the broadcast
command.
Please let me know if you have any other questions.
nunet actor cmd
This command invokes a behavior on an actor.
Usage
Available Commands
/broadcast/hello
: Invoke /broadcast/hello behavior on an actor.
/dms/node/onboarding/offboard
: Invoke /dms/node/onboarding/offboard behavior on an actor.
/dms/node/onboarding/onboard
: Invoke /dms/node/onboarding/onboard behavior on an actor.
/dms/node/onboarding/resource
: Invoke /dms/node/onboarding/resource behavior on an actor.
/dms/node/onboarding/status
: Invoke /dms/node/onboarding/status behavior on an actor.
/dms/node/peers/connect
: Invoke /dms/node/peers/connect behavior on an actor.
/dms/node/peers/dht
: Invoke /dms/node/peers/dht behavior on an actor.
/dms/node/peers/list
: Invoke /dms/node/peers/list behavior on an actor.
/dms/node/peers/ping
: Invoke /dms/node/peers/ping behavior on an actor.
/dms/node/peers/score
: Invoke /dms/node/peers/score behavior on an actor.
/dms/node/peers/self
: Invoke /dms/node/peers/self behavior on an actor.
/dms/node/vm/list
: Invoke /dms/node/vm/list behavior on an actor.
/dms/node/vm/start/custom
: Invoke /dms/node/vm/start/custom behavior on an actor.
/dms/node/vm/stop
: Invoke /dms/node/vm/stop behavior on an actor.
/public/hello
: Invoke /public/hello behavior on an actor
/public/status
: Invoke /public/status behavior on an actor
Flags
-c, --context string
: Capability context name.
-d, --dest string
: Destination DMS DID, peer ID or handle.
-e, --expiry time
: Expiration time.
-h, --help
: Help for the cmd
command.
-t, --timeout duration
: Timeout duration.
/broadcast/hello
Description: Invokes the /broadcast/hello
behavior on an actor. This sends a "hello" message to a broadcast topic for polite introduction.
Usage: nunet actor cmd /broadcast/hello [<param> ...] [flags]
Flags:
-h, --help
: Display help information for the /broadcast/hello
command
/dms/node/onboarding/offboard
Description: Invokes the /dms/node/onboarding/offboard
behavior on an actor. This is used to offboard a node from the DMS (Device Management Service).
Usage: nunet actor cmd /dms/node/onboarding/offboard [<param> ...] [flags]
Flags:
-f, --force
: Force the offboarding process overriding any safety checks and invalid states.
-h, --help
: Display help information for the /dms/node/onboarding/offboard
command.
/dms/node/onboarding/onboard
Description: Invokes the /dms/node/onboarding/onboard
behavior on an actor. This is used to onboard a node to the DMS, making its resources available for use.
Usage: nunet actor cmd /dms/node/onboarding/onboard [<param> ...] [flags]
Flags:
-a, --available
: Set the node as unavailable for job deployment (default: false).
-z, --cpu int
: Set number of CPU cores.
-h, --help
: Display help information for the /dms/node/onboarding/onboard
command.
-l, --local-enable
: Set server mode (enable for local) (default: true).
-m, --memory uint
: Set the value for memory usage in GB.
-x, --ntx-price float
: Set the price in NTX per minute for the onboarded compute resource.
-w, --wallet string
: Set the wallet address.
/dms/node/onboarding/resource
Description: Invokes the /dms/node/onboarding/resource
behavior on an actor. This retrieves or manages resource information related to the onboarding process.
Usage: nunet actor cmd /dms/node/onboarding/resource [<param> ...] [flags]
Flags:
-h, --help
: Display help information for the /dms/node/onboarding/resource
command.
/dms/node/onboarding/status
Description: Invokes the /dms/node/onboarding/status
behavior on an actor. This is used to check the onboarding status of a node.
Usage: nunet actor cmd /dms/node/onboarding/status [<param> ...] [flags]
Flags:
-h, --help
: Display help information for the /dms/node/onboarding/status
command
/dms/node/peers/connect
Description: Invokes the /dms/node/peers/connect
behavior on an actor. This initiates a connection to a specified peer.
Usage: nunet actor cmd /dms/node/peers/connect [<param> ...] [flags]
Flags:
-a, --address string
: The peer address to connect to
-h, --help
: Display help information for the /dms/node/peers/connect
command.
/dms/node/peers/dht
Description: Invokes the /dms/node/peers/dht
behavior on an actor. This interacts with the Distributed Hash Table (DHT) used for peer discovery and content routing
Usage: nunet actor cmd /dms/node/peers/dht [<param> ...] [flags]
Flags:
-h, --help
: Display help information for the /dms/node/peers/dht
command.
/dms/node/peers/list
Description: Invokes the /dms/node/peers/list
behavior on an actor. This retrieves a list of connected peers
Usage: nunet actor cmd /dms/node/peers/list [<param> ...] [flags]
Flags:
-h, --help
: Display help information for the /dms/node/peers/list
command.
/dms/node/peers/ping
Description: Invokes the /dms/node/peers/ping
behavior on an actor. This sends a ping message to a specified host to check its reachability
Usage: nunet actor cmd /dms/node/peers/ping [<param> ...] [flags]
Flags:
-h, --help
: Display help information for the /dms/node/peers/ping
command
-H, --host string
: The host address to ping
/dms/node/peers/score
Description: Invokes the /dms/node/peers/score
behavior on an actor. This retrieves a snapshot of the peer's gossipsub broadcast score.
Usage: nunet actor cmd /dms/node/peers/score [<param> ...] [flags]
Flags:
-h, --help
: Display help information for the /dms/node/peers/score
command
/dms/node/peers/self
Description: Invokes the /dms/node/peers/self
behavior on an actor. This retrieves information about the node itself, such as its ID or addresses
Usage: nunet actor cmd /dms/node/peers/self [<param> ...] [flags]
Flags:
-h, --help
: Display help information for the /dms/node/peers/self
command.
/dms/node/vm/list
Description: Invokes the /dms/node/vm/list
behavior on an actor. This retrieves a list of virtual machines (VMs) running on the node
Usage: nunet actor cmd /dms/node/vm/list [<param> ...] [flags]
Flags:
-h, --help
: Display help information for the /dms/node/vm/list
command.
/dms/node/vm/start/custom
Description: Invokes the /dms/node/vm/start/custom
behavior on an actor. This starts a new VM with custom configurations.
Usage: nunet actor cmd /dms/node/vm/start/custom [<param> ...] [flags]
Flags:
-a, --args string
: Arguments to pass to the kernel
-z, --cpu float32
: CPU cores to allocate (default 1)
-h, --help
: Display help information for the /dms/node/vm/start/custom
command.
-i, --initrd string
: Path to initial ram disk
-k, --kernel string
: Path to kernel image file.
-m, --memory uint
: Memory to allocate (default 1024)
-r, --rootfs string
: Path to root fs image file
/dms/node/vm/stop
Description: Invokes the /dms/node/vm/stop
behavior on an actor. This stops a running VM
Usage: nunet actor cmd /dms/node/vm/stop [<param> ...] [flags]
Flags:
-h, --help
: Display help information for the /dms/node/vm/stop
command
-i, --id string
: Execution id of the VM
/public/hello
Description: Invokes the /public/hello
behavior on an actor. This broadcasts a "hello" for a polite introduction.
Usage: nunet actor cmd /public/hello [<param> ...] [flags]
Flags:
-h, --help
: Display help information for the /public/hello
command
/public/status
Description: Invokes the /public/status
behavior on an actor. This retrieves the status or health information of the actor or system
Flags:
-h, --help
: Display help information for the /public/status
command
These flags can be used with any of the above commands:
-c, --context string
: Specifies the capability context name. This is used for authorization or access control.
-d, --dest string
: Specifies the destination for the command. This can be a DMS DID (Decentralized Identifier), a peer ID, or a handle.
-e, --expiry time
: Sets an expiration time for the message or command.
-t, --timeout duration
: Sets a timeout duration for the command. If the command does not complete within the specified duration, it will time out.
-h, --help
: Display help information for the commands
Last updated: 2024-09-27 10:47:19.790956 File source: link on GitLab
The backend sub package contains the actual implementation of the Nunet CLI commands.
Here is quick overview of the contents of this directory:
README: Current file which is aimed towards developers who wish to use and modify the cmd functionality.
backend: This file defines various interfaces DMS backend service. These interfaces provide abstractions for functionalities like resource management, peer management, network management, logging, and file system access.
filesystem: This file implements FileSystem functionality using the standard os
package. It provides functions for basic file operations like creating, opening, reading, writing, and deleting files and directories.
journal: This file implements a wrapper to go-systemd/sdjournal
functionality. It wraps the sdjournal
functionality providing access to systemd journal entries like adding filters, retrieving entries, and iterating through them.
libp2p: This file implements functionalites to clear incoming chat requests and decode a peer id.
network: This file implements a method to get network connections data.
resources: This file implements a method to get total capacity of the machine.
utils: This file implements utitlity functions for backend functionality.
wallet: This file contains methods to get wallet address for the user.
websocket: This file implements a WebSocket Client for establishing and managing WebSocket connections. It provides functions to initialize the connection, send/receive messages, and handle pings for maintaining the connection.
The class diagram for the backend
package is shown below.
Source file
Rendered from source file
ResourceManager interface
ResourceManager
interface consists of following methods:
GetTotalProvisioned
signature: GetTotalProvisioned() *types.Provisioned
input: None
output: types.onboarding.Provisioned
GetTotalProvisioned
returns the total capacity of the machine.
PeerManager interface
PeerManager
interface abstracts libp2p functionality. It consists of following methods:
ClearIncomingChatRequests
signature: ClearIncomingChatRequests() error
input: None
output (error): error message
ClearIncomingChatRequests
deletes all the incoming chat requests.
Decode
signature: Decode(s string) (peer.ID, error)
input: peerID string
output: decoded ID
of type string
output (error): error message
Decode
receives an encoded peerID string and returns the decoded ID.
WalletManager interface
WalletManager
interface consists of following methods:
GetCardanoAddressAndMnemonic
signature: GetCardanoAddressAndMnemonic() (*types.BlockchainAddressPrivKey, error)
input: None
output: types.onboarding.BlockchainAddressPrivKey
output (error): error message
GetCardanoAddressAndMnemonic
generates wallet on Cardano blockchain.
GetEthereumAddressAndPrivateKey
signature: GetEthereumAddressAndPrivateKey() (*types.BlockchainAddressPrivKey, error)
input: None
output: types.onboarding.BlockchainAddressPrivKey
output (error): error message
GetEthereumAddressAndPrivateKey
generates wallet on Ethereum blockchain.
NetworkManager interface
NetworkManager
interface abstracts connection on ports. It consists of following methods:
GetConnections
signature: GetConnections(kind string) ([]gonet.ConnectionStat, error)
input: type of connection
output: list of Connection Stats
output (error): error message
GetConnections
returns the list of network connections opened on the machine.
Utility interface
Utility
interface abstracts helper functions. It consists of following methods:
IsOnboarded
signature: IsOnboarded() (bool, error)
input: None
output: bool
value showing whether the machine is onboarded or not.
output (error): error message
IsOnboarded
checks whether machine is onboarded to Nunet.
ReadMetadataFile
signature: ReadMetadataFile() (*types.Metadata, error)
input: None
output: types.onboarding.Metadata
output (error): error message
ReadMetadataFile
reads metadata file from the machine.
ResponseBody
signature: ResponseBody(c *gin.Context, method, endpoint, query string, body []byte) ([]byte, error)
input #1 : Context object
input #2 : HTTP method
input #3 : Endpoint URL
input #4 : Query parameters string
input #5 : Payload
output: byte value of the API Response
output (error): error message
ResponseBody
executes an internal call to the DMS API endpoint and returns the response.
WebSocketClient interface
WebSocketClient
interface provides functionality to chat commands. It consists of following methods:
Initialize
signature: Initialize(url string) error
input: target url
output: none
output (error): error message
Initialize
initiates the dialing procedure to connect to the provided endpoint URL.
Close
signature: Close() error
input: none
output: none
output (error): error message
Close
closes the active WebSocket connection.
ReadMessage
signature: ReadMessage(ctx context.Context, w io.Writer) error
input #1: Context object
input #1: io writer
output: none
output (error): error message
ReadMessage
reads the incoming messages over a websocket connection.
WriteMessage
signature: WriteMessage(ctx context.Context, r io.Reader) error
input #1: Context object
input #1: io reader
output: none
output (error): error message
WriteMessage
sends a message over a websocket connection.
Ping
signature: Ping(ctx context.Context, w io.Writer) error
input #1: Context object
input #1: io writer
output: none
output (error): error message
Ping
sends WebSocket pings at 30 second intervals until the context is canceled or an error prevents sending the ping message.
Logger interface
Logger
interface abstracts systemd journal entries. It consists of following methods:
AddMatch
signature: AddMatch(match string) error
input: filter pattern string
output: none
output (error): error message
AddMatch
utilizes the input pattern string to filter the Systemd journal.
Close
signature: Close() error
input: none
output: none
output (error): error message
Close
closes an open systemd journal.
GetEntry
signature: GetEntry() (*sdjournal.JournalEntry, error)
input: none
output: systemd journal entry
output (error): error message
GetEntry
retrieves the next journal entry from the Systemd journal.
Next
signature: Next() (uint64, error)
input: none
output: byte offset for next entry
output (error): error message
Next
advances the read pointer into the journal by one entry. This prepares the stage for the subsequent GetEntry
method call.
FileSystem interface
FileSystem
interface abstracts abstracts Afero/os calls. It consists of following methods:
Create
signature: Create(name string) (FileHandler, error)
input: file name
output: file object
output (error): error message
Create
function creates a new file using the provided name.
MkdirAll
signature: MkdirAll(path string, perm os.FileMode) error
input #1: directory path
input #2: file mode and permission
output: none
output (error): error message
MkdirAll
creates a new directory at the specified path.
OpenFile
signature: OpenFile(name string, flag int, perm os.FileMode) (FileHandler, error)
input #1: file name including the path
input #2: access mode
input #2: file permissions
output: file object
output (error): error message
OpenFile
opens the file with the provided name.
ReadFile
signature: ReadFile(filename string) ([]byte, error)
input: file name
output: byte data of the file
output (error): error message
ReadFile
reads the file with the provided name.
RemoveAll
signature: RemoveAll(path string) error
input: path
output: none
output (error): error message
RemoveAll
deletes all the data at the provided path.
Walk
signature: Walk(root string, walkFn filepath.WalkFunc) error
input #1: root directory path
input #2: callback function
output: none
output (error): error message
Walk
navigates a file hierarchy, instigating a callback function at each discovery.
FileHandler interface
FileSystem
interface abstracts file interfaces shared between os
and afero
so that both can be used interchangeably. It consists of following methods:
io methods (Go standard library)
io.Closer
io.Reader
io.ReaderAt
io.Seeker
io.Writer
io.WriterAt
Stat
signature: Stat() (os.FileInfo, error)
input: none
output: file information
output (error): error message
Stat
returns information about the file.
WriteString
signature: WriteString(s string) (int, error)
input: string to be written
output: number of bytes written
output (error): error message
WriteString
writes the content of the provided string to the file.
ConnectionStat
: This is a data type defined in Go
net
package. It consists of network connection data. See here for more details.
FileInfo
: data type defined in Go
fs
pacakge. It consists of file information. See here for more details.
Refer to cmd
package for all other data types applicable.
The methods and interfaces in the backend
subpacakge can be used to test the functionality of the cmd
pacakge commands. Currently no unit test are defined since the implementaton is mostly wrappers around functions that should be tested somewhere else.
List of issues
All issues that are related to the design of cmd
package can be found below. These include any proposals for modifications to the package or new functionality needed to cover the requirements of other packages.