Using middleware
Getting started
So we have our two commands, but we're repeating a lot of code. Wouldn't it be nice if we could re-use the code that parses the list of numbers? That's where middleware comes in.
Creating the middleware
Let's create a standalone middleware function that parses the numbers for us and adds the result to context state. Create it like this:
const numberMiddleware = (context, next) => {
  const { content, state } = context
  const numbers = content.split(" ").map(n => Number(n))
  state.numbers = numbers
  return next()
}
Now, we can add this middleware to our commands:
const sumCommand = new Command()
  .match(matchPrefixes("sum "))
  .use(numberMiddleware)
  .use(context => {
    const { numbers } = context.state
    const summed = numbers.reduce((a, b) => a + b)
    console.log(summed)
  })
const multiplyCommand = new Command()
  .match(matchPrefixes("multiply "))
  .use(numberMiddleware)
  .use(context => {
    const { numbers } = context.state
    const multiplied = numbers.reduce((a, b) => a * b)
    console.log(multiplied)
  })
The advantage of using middleware is that we can re-use code for specific situations like this one. Let's make our middleware even better by validating that the numbers passed are actual numbers:
const numberMiddleware = (context, next) => {
  const { content, state } = context
  const numbers = content.split(" ").map(n => Number(n))
  if (numbers.some(n => isNaN(n))) {
    console.log("Please specify a list of numbers separated by space.")
    return
  }
  state.numbers = numbers
  return next()
}
If you run your code again and input sum i am a number you should get the message "Please specify a list of numbers separated by space."