text: const fs = require('fs-extra')
  const path = require('path')
  const { flatten } = require('lodash')
  
  exports.topics = [
    { name: 'apps', description: 'manage apps' },
    { name: 'auth', description: 'heroku authentication' },
    { name: 'config', description: 'manage app config vars' },
    { name: 'domains', description: 'manage the domains for an app' },
    { name: 'drains', description: 'list all log drains' },
    { name: 'dyno', hidden: true },
    { name: 'features', description: 'manage optional features' },
    { name: 'keys', description: 'manage ssh keys' },
    { name: 'labs', description: 'experimental features' },
    { name: 'maintenance', description: 'manage maintenance mode for an app' },
    { name: 'notifications', description: 'display notifications' },
    { name: 'ps', description: 'manage dynos (dynos, workers)' },
    { name: 'releases', description: 'manage app releases' }
  ]
  
  function getCommands (dir) {
    function requireCommand (f) {
      let c = require(f)
      return c.default ? c.default : c
    }
  
    let all = fs.readdirSync(dir).map(f => path.join(dir, f))
    let commands = all
      .filter(f => path.extname(f) === '.js' && !f.endsWith('.test.js'))
      .map(requireCommand)
    let subs = all
      .filter(f => fs.lstatSync(f).isDirectory())
      .map(getCommands)
    return flatten(commands.concat(flatten(subs)))
  }
  
  exports.commands = getCommands(path.join(__dirname, 'commands'))
  